Set identity insert on: SET IDENTITY_INSERT (Transact-SQL) — SQL Server

sql — для IDENTITY_INSERT установлено значение OFF — как его включить?

Задавать вопрос

спросил

Изменено
7 месяцев назад

Просмотрено
521 тысяч раз

133

Новинка! Сохраняйте вопросы или ответы и организуйте свой любимый контент.
Узнать больше.

У меня есть база данных архива удаленных файлов, в которой хранится идентификатор файла, который был удален, я хочу, чтобы админ имел возможность восстановить файл (а также тот же идентификатор для связывания файлов). Я не хочу убирать identity_insert со всей таблицы, так как приращение на единицу прекрасно работает. В моей вставке в процедуру хранения TBL_Content у меня есть что-то вроде этого

, установленного ANSI_NULLS ON
установить QUOTED_IDENTIFIER на
УСТАНОВИТЕ IDENTITY_INSERT tbl_content ON
ИДТИ
Процедура ALTER [dbo]. [spInsertDeletedIntoTBLContent]
@ContentID целое число,
...вставить команду...
ВЫКЛЮЧИТЬ IDENTITY_INSERT tbl_content
 

Но я продолжаю получать ту же ошибку:

Невозможно вставить явное значение для столбца идентификации в таблице
‘TBL_Content’, когда для IDENTITY_INSERT установлено значение OFF.

Любая помощь?

  • sql
  • sql-сервер
  • tsql

0

Следует ли вместо этого включить вставку идентификаторов в хранимой процедуре? Похоже, вы включаете его только при изменении хранимой процедуры, а не при ее фактическом вызове. Попробуйте:

 Процедура ALTER [dbo].[spInsertDeletedIntoTBLContent]
@ContentID целое число,
УСТАНОВИТЕ IDENTITY_INSERT tbl_content ON
...вставить команду...
ВЫКЛЮЧИТЬ IDENTITY_INSERT tbl_content
ИДТИ
 

0

Я считаю, что это нужно сделать в одном пакете запросов. По сути, операторы GO разбивают ваши команды на несколько пакетов, и это вызывает проблему. Измените его на это:

 SET IDENTITY_INSERT tbl_content ON
/* ИДТИ */
...вставить команду...
ВЫКЛЮЧИТЬ IDENTITY_INSERT tbl_content
ИДТИ
 

1

Разве вы не должны установить identity_Insert в положение ON, вставить записи, а затем снова отключить его?

Вот так:

 установить ANSI_NULLS ON
установить QUOTED_IDENTIFIER на
УСТАНОВИТЕ IDENTITY_INSERT tbl_content ON
ИДТИ
Процедура ALTER [dbo].[spInsertDeletedIntoTBLContent]
@ContentID целое число,
УСТАНОВИТЕ IDENTITY_INSERT tbl_content ON
...вставить команду...
ВЫКЛЮЧИТЬ IDENTITY_INSERT tbl_content
 

0

Напоминание

SQL Server позволяет только одной таблице иметь свойство IDENTITY_INSERT, установленное в ON.

Это не работает:

 SET IDENTITY_INSERT TableA ON
УСТАНОВИТЕ IDENTITY_INSERT TableB ON
. .. ВСТАВИТЬ В Таблицу A ...
... ВСТАВИТЬ В таблицу B ...
УСТАНОВИТЬ IDENTITY_INSERT TableA OFF
УСТАНОВИТЬ IDENTITY_INSERT TableB OFF
 

Вместо:

 УСТАНОВИТЬ IDENTITY_INSERT TableA ON
... ВСТАВИТЬ В Таблицу A ...
УСТАНОВИТЬ IDENTITY_INSERT TableA OFF
УСТАНОВИТЕ IDENTITY_INSERT TableB ON
... ВСТАВИТЬ В таблицу B ...
УСТАНОВИТЬ IDENTITY_INSERT TableB OFF
 

Добавить эту строку над вами Query

 SET IDENTITY_INSERT tbl_content ON
 

Ссылка: http://technet.microsoft.com/en-us/library/aa259221%28v=sql.80%29.aspx

Моя таблица называется Жанр с 3 столбцами Id , Имя и SortOrder

Я использовал следующий код:

 SET IDENTITY_INSERT Genre ON
INSERT INTO Genre(Id, Name, SortOrder) VALUES (12, "Moody Blues", 20)
 

Добавить также зачет

 УСТАНОВИТЬ IDENTITY_INSERT Жанр ВКЛ.
    INSERT INTO Genre(Id, Name, SortOrder) VALUES (12, "Moody Blues", 20)
    УСТАНОВИТЬ IDENTITY_INSERT Жанр ВЫКЛ. 
 

У меня было две разные таблицы, и для первой вставка работает нормально, но для второй возникает это исключение, касающееся вставки удостоверений.
Проблема заключалась в том, что в таблице было поле (int) в качестве ключа подделки, которое не было заполнено .

1

Как установить IDENTITY_INSERT ON в SQL Server 2008 для нескольких таблиц одновременно

спросил

Изменено
7 лет, 10 месяцев назад

Просмотрено
33 тысячи раз

11

Новинка! Сохраняйте вопросы или ответы и организуйте свой любимый контент.
Узнать больше.

У меня две таблицы tblData1 и tblData2 , и теперь я хочу перенести записи из другой таблицы с вставкой идентификатора, и я пытаюсь выполнить команду, как показано ниже

 SET IDENTITY_INSERT LP1. dbo.tblData1 ON
ИДТИ
УСТАНОВИТЕ IDENTITY_INSERT LP1.dbo.tblData2 ВКЛ.
ИДТИ
ВСТАВИТЬ В LP1.DBO.tblData1 (ИДЕНТИФИКАТОР, ДАННЫЕ)
ВЫБЕРИТЕ ID,ДАННЫЕ ИЗ LP.DBO.tblData1
ИДТИ
ВСТАВИТЬ В LP1.DBO.tblData2 (ИДЕНТИФИКАТОР, ДАННЫЕ)
ВЫБЕРИТЕ ID,ДАННЫЕ ИЗ LP.DBO.tblData2
ИДТИ
ВЫКЛЮЧИТЬ IDENTITY_INSERT LP1.dbo.tblData1
ИДТИ
ВЫКЛЮЧИТЬ IDENTITY_INSERT LP1.dbo.tblData2
ИДТИ
 

Но он показывает ошибку, как показано ниже

IDENTITY_INSERT уже включен для таблицы Sample_Training.dbo.tblData1. Не удается выполнить операцию SET для таблицы «dbo.tblData2»

Is it possible to perform multiple IDENTITY_INSERT at time in SQL Server 2008

  • sql
  • sql-server
  • database
  • sql-server-2008
  • sql-server-2008-r2

3

В любое время только одна таблица в сеансе может иметь значение ON для свойства IDENTITY_INSERT.

Поэтому, прежде чем включить другой, вы должны отключить существующие, если они есть.
Если столов меньше, то можно включать и выключать до и после своих операций.
Если количество таблиц велико, вам следует как-то автоматизировать их включение и выключение перед выполнением операций.

2

Вы пытались изменить порядок

 идти
УСТАНОВИТЕ IDENTITY_INSERT LP1.dbo.tblData1 ON
ВСТАВИТЬ В LP1.DBO.tblData1
            (ID, ДАННЫЕ)
ВЫБЕРИТЕ ИДЕНТИФИКАТОР, ДАННЫЕ
ИЗ LP.DBO.tblData1
ВЫКЛЮЧИТЬ IDENTITY_INSERT LP1.dbo.tblData1
ИДТИ
УСТАНОВИТЕ IDENTITY_INSERT LP1.dbo.tblData2 ВКЛ.
ВСТАВИТЬ В LP1.DBO.tblData2
            (ID, ДАННЫЕ)
ВЫБЕРИТЕ ИДЕНТИФИКАТОР, ДАННЫЕ
ИЗ LP.DBO.tblData2
ВЫКЛЮЧИТЬ IDENTITY_INSERT LP1.dbo.tblData2
ИДТИ
 

3

Вы можете установить Identity_Insert только для одной таблицы за раз в одном сеансе.