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.

Odpowiedzi:


126

To powinno działać:

INSERT INTO GroupTable DEFAULT VALUES 

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


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.