SQL-Как вставить строку без автоматического увеличения столбца идентификатора? - PullRequest
28 голосов
/ 26 июня 2009

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

Итак, вот в чем проблема. Я должен вставить в эту таблицу идентификатор для столбца, который уже был создан и удален из таблицы. Вроде как воскрешение этого идентификатора и помещение его обратно в стол.

Так как я могу сделать это программно, не отключая приращение столбца. Поправьте меня, если я ошибаюсь, если я отключаю его программно, он перезапустится с 0 или 1, и я не хочу, чтобы это произошло ...

Ответы [ 4 ]

70 голосов
/ 26 июня 2009

Если вы находитесь в 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
8 голосов
/ 26 июня 2009

В дополнение к ответу Чарльза (который теперь на 100% правильный :-) и который сохраняет текущее значение IDENTITY в таблице), вы также можете проверить текущее значение IDENTITY в таблице - вы можете сделать это с помощью этой команды здесь:

DBCC CHECKIDENT('YourTableName')

Если вам когда-либо потребуется изменить его, вы можете сделать это с помощью этой команды здесь:

DBCC CHECKIDENT ('YourTableName', RESEED, (new value for IDENTITY) )
4 голосов
/ 11 ноября 2014

На самом деле приведенный выше код для INDENTITY_INSERT верен - при его включении сервер сообщает, что вы хотите вставить значения самостоятельно. Это позволяет вам вставлять значения в столбец IDENTITY. Затем вы захотите выключить его (что позволит серверу генерировать и вставлять значения), когда вы закончите.

0 голосов
/ 30 марта 2019
bulk insert tablename from 'C:\test.csv' with (rowterminator = '\n',fieldterminator = ',',KEEPIDENTITY)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...