Wie füge ich eine Tabelle mit nur einer IDENTITY-Spalte ein?

83

(Kam mit dieser Frage auf, als ich versuchte, diese andere zu beantworten )

Betrachten Sie die folgende MS-SQL-Tabelle mit dem Namen GroupTable:

Gruppen-ID
-------
1  
2  
3  

Dabei ist GroupID der Primärschlüssel und eine Identitätsspalte.

Wie füge ich eine neue Zeile in die Tabelle ein (und generiere damit eine neue ID), ohne IDENTITY_INSERT ON zu verwenden?

Beachten Sie Folgendes:

INSERT INTO GroupTable() Values ()   

... wird nicht funktionieren.

Bearbeiten: Wir sprechen hier von SQL 2005 oder SQL 2008.

codeulike
quelle

Antworten:

126

Das sollte funktionieren:

INSERT INTO GroupTable DEFAULT VALUES 
DJ.
quelle
Ich kann dies nicht mit Visual Studio 2008 / SQL Express 2005 zum Laufen bringen. Irgendwelche Ideen? Gleiches Tabellenlayout, eine Spalte, Primärschlüssel, Identität (1,1).
Thomas Sandberg
Ich verwende SQL 2008 R2, auch für mich keine Freude!
TDaver
Funktioniert für mich unter SQL Server 2008 Express.
Adrian Lynch
3
@RomanPekar, in SqlServer 2008 und höher ist dies mit dem mergeOperator möglich . ZBmerge into TableName using (values (1), (2), (3)) s(n) on 1=0 when not matched then insert default values;
i-one
17

Bitte schön:

INSERT INTO GroupTable DEFAULT VALUES
tofi9
quelle
3

Es ist möglich, mehr als eine Zeile gleichzeitig einzufügen.

Zum Beispiel, um 30 Zeilen einzufügen. INSERT IN GroupTable STANDARDWERTE GO 30

Dadurch werden 30 Zeilen eingefügt, indem die Identitätsspalte jedes Mal erhöht wird.

RMK
quelle
Ich bin mir nicht sicher über SQL 2008, aber in 2008R2 funktioniert dies nicht (ich erhalte den generischen Fehler "Ungültige Syntax in der Nähe von 'GO'")
Elaskanator
0

Können Sie versuchen, eine Sequenz oder ähnliches zu verwenden? Wenn Sie aus einer Sequenz auswählen, erhalten Sie den nächsten Wert in der Sequenz.

Mike Pone
quelle
Ich denke, er spricht über Oracle DB
Codeulike
Ich weiß, dass Sequenzen in Oracle existieren und war mir nicht sicher, welche (wenn überhaupt) vergleichbaren Dinge in SQL Server vorhanden waren. Deshalb habe ich es mit "oder etwas Ähnlichem" versehen und dann eine Definition einer Sequenz als Referenz gegeben.
Mike Pone
3
SQL Server 2012 hat SEQUENCE s.
Nick Chammas