Как вставить в таблицу только один столбец IDENTITY?


84

(Придумал этот вопрос, пытаясь ответить на этот другой )

Рассмотрим следующую таблицу MS-SQL, называемую GroupTable:

GroupID
-------
1  
2  
3  

где GroupID - это первичный ключ и столбец Identity.

Как вставить новую строку в таблицу (и, следовательно, создать новый идентификатор) без использования IDENTITY_INSERT ON?

Обратите внимание, что это:

INSERT INTO GroupTable() Values ()   

... не сработает.

изменить: здесь мы говорим о SQL 2005 или SQL 2008.

Ответы:


126

Это должно работать:

INSERT INTO GroupTable DEFAULT VALUES 

Я не могу заставить это работать с Visual Studio 2008 / SQL Express 2005. Есть идеи? Тот же макет таблицы, один столбец, первичный ключ, идентификатор (1,1).
Томас Сэндберг,

Я использую SQL 2008 R2, тоже не в радость!
TDaver 05

У меня работает на SQL Server 2008 Express.
Адриан Линч,

3
@RomanPekar, в SqlServer 2008 и более поздних версиях это возможно с помощью mergeоператора. Напримерmerge into TableName using (values (1), (2), (3)) s(n) on 1=0 when not matched then insert default values;
i-one


3

Одновременно можно вставить более одной строки.

Например, чтобы вставить 30 строк. ВСТАВИТЬ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ в GroupTable GO 30

Это приведет к вставке 30 строк, каждый раз увеличивая столбец идентификаторов.


Не уверен насчет SQL 2008, но в 2008R2 это не работает (я получаю общую ошибку «Недопустимый синтаксис рядом с 'GO'»)
Elaskanator

0

Можете ли вы попробовать использовать последовательность или что-то подобное? Где вы выбираете из последовательности, и это даст вам следующее значение в последовательности.


Я думаю, он говорит об Oracle DB
codeulike

Я знаю, что последовательности существуют в Oracle, и не был уверен, что (если есть) сопоставимые вещи существуют в SQL Server. Вот почему я добавил к нему суффикс «или что-то подобное», а затем дал определение Последовательности для справки.
Майк Пон,

3
SQL Server 2012 имеет SEQUENCE s.
Ник Чаммас,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.