SQL-Как вставить строку без автоматического увеличения столбца идентификатора?
-
20-08-2019 - |
Вопрос
У меня есть таблица, в которой есть столбец принудительного автоматического увеличения, и этот столбец представляет собой очень ценный идентификатор, который сохраняется во всем приложении.К сожалению, с моей стороны было плохой разработкой, чтобы использовать этот столбец с автоматическим приращением.
Итак, вот в чем проблема.Мне нужно вставить в эту таблицу идентификатор уже созданного и удаленного из таблицы столбца.Что-то вроде воскрешения этого идентификатора и помещения его обратно в таблицу.
Итак, как я могу сделать это программно, не отключая приращение столбца.Поправьте меня, если я ошибаюсь, если я отключу его программно, он перезапустится с 0 или 1, и я не хочу, чтобы это произошло...
Решение
Если вы используете Microsoft SQL Server, вы можете «отключить» функцию автоинкрементирования, выполнив оператор Set Identity_Insert [TableName] On
, как в:
Set Identity_Insert [TableName] On
-- --------------------------------------------
Insert TableName (pkCol, [OtherColumns])
Values(pkValue, [OtherValues])
-- ---- Don't forget to turn it back off ------
Set Identity_Insert [TableName] Off
Другие советы
В дополнение к ответу Чарльза (который теперь на 100% правильный :-) и который сохраняет текущее значение IDENTITY в таблице), вы также можете проверить текущее значение IDENTITY в таблице - вы можете сделать это с этой командой здесь:
DBCC CHECKIDENT('YourTableName')
Если вам когда-нибудь понадобится на самом деле изменять это, вы можете сделать это, используя эту команду здесь:
DBCC CHECKIDENT ('YourTableName', RESEED, (new value for IDENTITY) )
На самом деле приведенный выше код для INDENTITY_INSERT верен: его включение сообщает серверу, что вы хотите вставить значения самостоятельно.Он позволяет вставлять значения в столбец IDENTITY.Затем вы захотите снова отключить его (позволив серверу генерировать и вставлять значения), когда вы закончите.
bulk insert tablename from 'C:\test.csv' with (rowterminator = '\n',fieldterminator = ',',KEEPIDENTITY)