Jak wstawić do tabeli zawierającej tylko jedną kolumnę IDENTITY?

84

(Pojawiłem się z tym pytaniem, próbując odpowiedzieć na to drugie )

Rozważmy następującą tabelę MS-SQL, zwaną GroupTable:

Identyfikator grupy
-------
1  
2  
3  

gdzie GroupID to klucz podstawowy i kolumna Identity.

Jak wstawić nowy wiersz do tabeli (a tym samym wygenerować nowy identyfikator) bez używania IDENTITY_INSERT ON?

Zauważ, że to:

INSERT INTO GroupTable() Values ()   

... nie zadziała.

edycja: mówimy tutaj o SQL 2005 lub SQL 2008.

codeulike
źródło

Odpowiedzi:

126

To powinno działać:

INSERT INTO GroupTable DEFAULT VALUES 
DJ.
źródło
Nie mogę zmusić tego do współpracy z Visual Studio 2008 / SQL Express 2005. Jakieś pomysły? Ten sam układ tabeli, jedna kolumna, klucz podstawowy, tożsamość (1,1).
Thomas Sandberg
Używam SQL 2008 R2, mnie też nie cieszy!
TDaver
Działa dla mnie na SQL Server 2008 Express.
Adrian Lynch,
3
@RomanPekar, w SqlServer 2008 i późniejszych jest to możliwe z mergeoperatorem. Np.merge into TableName using (values (1), (2), (3)) s(n) on 1=0 when not matched then insert default values;
i-one
17

Proszę bardzo:

INSERT INTO GroupTable DEFAULT VALUES
tofi9
źródło
3

Jednocześnie można wstawić więcej niż jeden wiersz.

Na przykład, aby wstawić 30 wierszy. WSTAW DO TABELI WARTOŚCI DOMYŚLNYCH DO 30

Spowoduje to wstawienie 30 wierszy, każdorazowo zwiększając kolumnę tożsamości.

RMK
źródło
Nie jestem pewien co do SQL 2008, ale w 2008R2 to nie działa (pojawia się ogólny błąd „Nieprawidłowa składnia w pobliżu 'GO'”)
Elaskanator
0

Czy możesz spróbować użyć sekwencji lub czegoś podobnego? Tam, gdzie wybierasz z sekwencji, a otrzymasz następną wartość w sekwencji.

Mike Pone
źródło
Myślę, że mówi o Oracle DB
codeulike
Wiem, że sekwencje istnieją w Oracle i nie byłem pewien, czy (jeśli w ogóle) porównywalna rzecz istnieje w SQL Server. Dlatego dodałem do niego sufiks „lub coś podobnego”, a następnie podałem definicję sekwencji w celach informacyjnych.
Mike Pone
3
SQL Server 2012 ma SEQUENCE s.
Nick Chammas