Как вставить в таблицу только один столбец 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 
DJ.
источник
Я не могу заставить это работать с 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
17

Ну вот:

INSERT INTO GroupTable DEFAULT VALUES
тофи9
источник
3

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

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

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

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

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

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