IDENTITY列が1つしかないテーブルに挿入するにはどうすればよいですか?


84

この他の質問に答えようとする過程でこの質問を思いついた)

GroupTableと呼ばれる次のMS-SQLテーブルについて考えてみます。

GroupID
-------
1  
2  
3  

ここで、GroupIDは主キーであり、Identity列です。

IDENTITY_INSERT ON使用せずに、テーブルに新しい行を挿入する(したがって、新しいIDを生成する)にはどうすればよいですか?

これに注意してください:

INSERT INTO GroupTable() Values ()   

...動作しません。

編集:ここではSQL2005またはSQL2008について話しています。

回答:


126

これは機能するはずです:

INSERT INTO GroupTable DEFAULT VALUES 

これをVisualStudio 2008 / SQL Express 2005で動作させることができません。何かアイデアはありますか?同じテーブルレイアウト、1列、主キー、identity(1,1)。
トーマスサンドバーグ

私はSQL2008 R2を使用していますが、私にとっても喜びはありません。
TDaver 2011年

SQL Server 2008Expressで動作します。
エイドリアンリンチ

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のデフォルト値に挿入GO30

これにより、ID列が毎回インクリメントされて30行が挿入されます。


SQL 2008についてはよくわかりませんが、2008R2では機能しません(「GO」の近くに無効な構文があります)
Elaskanator 2018年

0

シーケンスなどを使ってみてください。シーケンスから選択すると、シーケンスの次の値が表示されます。


彼は
OracleDB

Oracleにシーケンスが存在することは知っていますが、SQL Serverに同等のものが存在するかどうかはわかりませんでした。そのため、「または類似のもの」という接尾辞を付けて、参照用にシーケンスの定義を示しました。
Mike Pone

3
SQL Server2012にはSEQUENCEがあります。
Nick Chammas 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.