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 только для одной таблицы за раз в одном сеансе.