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

StackOverflow https://stackoverflow.com/questions/1049625

  •  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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top