2009-06-26 5 views
24

У меня есть таблица с принудительным автоинкрементным столбцом, и этот столбец является очень ценным идентификатором, который сохраняется во всем приложении. Извините, что с моей стороны было плохое развитие, чтобы это было автоматически увеличивающимся столбцом.SQL-Как вставить строку без автоматического увеличения столбца ID?

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

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

+0

Какие СУБД вы используете? – Quassnoi

+0

MS-SQL-сервер для этого вопроса ... –

ответ

58

Если вы находитесь в 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 
+0

Спасибо, @jvanderh, я отредактировал для уточнения –

+0

marc_s прав ... у вас есть это в обратном направлении – jvanderh

+0

Сохраняет ли последнее число для увеличивающегося идентификатора? Я не хочу, чтобы он сбросил весь столбец Identity it self ... –

7

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

DBCC CHECKIDENT('YourTableName') 

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

DBCC CHECKIDENT ('YourTableName', RESEED, (new value for IDENTITY)) 
3

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