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.

Antworten:


126

Das sollte funktionieren:

INSERT INTO GroupTable DEFAULT VALUES 

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

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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.