Come inserire in una tabella con una sola colonna IDENTITY?


84

(Mi sono avvicinato a questa domanda mentre cercavo di rispondere a quest'altra )

Considera la seguente tabella MS-SQL, chiamata GroupTable:

GroupID
-------
1  
2  
3  

dove GroupID è la chiave primaria ed è una colonna Identity.

Come si inserisce una nuova riga nella tabella (e quindi si genera un nuovo ID) senza utilizzare IDENTITY_INSERT ON?

Nota che questo:

INSERT INTO GroupTable() Values ()   

... non funzionerà.

modifica: stiamo parlando di SQL 2005 o SQL 2008 qui.

Risposte:


126

Questo dovrebbe funzionare:

INSERT INTO GroupTable DEFAULT VALUES 

Non riesco a farlo funzionare con Visual Studio 2008 / SQL Express 2005. Qualche idea? Stesso layout di tabella, una colonna, chiave primaria, identità (1,1).
Thomas Sandberg

Sto usando SQL 2008 R2, nessuna gioia neanche per me!
TDaver

Funziona per me su SQL Server 2008 Express.
Adrian Lynch

3
@RomanPekar, in SqlServer 2008 e versioni successive è possibile con mergeoperatore. Ad esempiomerge into TableName using (values (1), (2), (3)) s(n) on 1=0 when not matched then insert default values;
i-one

17

Ecco qui:

INSERT INTO GroupTable DEFAULT VALUES

3

È possibile inserire più di una riga alla volta.

Ad esempio, per inserire 30 righe. INSERT INTO GroupTable VALORI PREDEFINITI VAI 30

Ciò inserirà 30 righe incrementando ogni volta la colonna Identity.


Non sono sicuro di SQL 2008, ma nel 2008R2 non funziona (ricevo l'errore generico "Sintassi non valida vicino a 'GO'")
Elaskanator

0

Puoi provare a usare una sequenza o qualcosa di simile? Dove selezioni da una sequenza e ti darà il valore successivo nella sequenza.


Penso che stia parlando di Oracle DB
codeulike

So che le sequenze esistono in Oracle e non ero sicuro di quale (se esisteva) cosa comparabile esistesse in SQL Server. Questo è il motivo per cui ho aggiunto "o qualcosa di simile" e poi ho dato una definizione di sequenza come riferimento.
Mike Pone

3
SQL Server 2012 ha SEQUENCE s.
Nick Chammas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.