¿Cómo insertar en una tabla con una sola columna de IDENTIDAD?


84

(Se me ocurrió esta pregunta mientras intentaba responder a esta otra )

Considere la siguiente tabla de MS-SQL, llamada GroupTable:

Identificación del grupo
-------
1  
2  
3  

donde GroupID es la clave principal y es una columna de identidad.

¿Cómo inserta una nueva fila en la tabla (y por lo tanto genera una nueva ID) sin usar IDENTITY_INSERT ON?

Tenga en cuenta que esto:

INSERT INTO GroupTable() Values ()   

... no funcionará.

editar: estamos hablando de SQL 2005 o SQL 2008 aquí.

Respuestas:


126

Esto debería funcionar:

INSERT INTO GroupTable DEFAULT VALUES 

No puedo hacer que esto funcione con Visual Studio 2008 / SQL Express 2005. ¿Alguna idea? Mismo diseño de tabla, una columna, clave principal, identidad (1,1).
Thomas Sandberg

Estoy usando SQL 2008 R2, ¡tampoco me alegro!
TDaver

Me funciona en SQL Server 2008 Express.
Adrian Lynch

3
@RomanPekar, en SqlServer 2008 y posteriores es posible con el mergeoperador. Por ejemplomerge into TableName using (values (1), (2), (3)) s(n) on 1=0 when not matched then insert default values;
i-one

17

Aqui tienes:

INSERT INTO GroupTable DEFAULT VALUES

3

Es posible insertar más de una fila a la vez.

Por ejemplo, para insertar 30 filas. INSERT INTO GroupTable VALORES PREDETERMINADOS GO 30

Esto insertará 30 filas incrementando la columna de identidad cada vez.


No estoy seguro sobre SQL 2008, pero en 2008R2 esto no funciona (aparece el error genérico "Sintaxis no válida cerca de 'GO'")
Elaskanator

0

¿Puedes intentar usar una secuencia o algo similar? Donde selecciona de una secuencia y le dará el siguiente valor en la secuencia.


Creo que está hablando de Oracle DB
codeulike

Sé que existen secuencias en Oracle y no estaba seguro de qué cosa comparable (si es que existe) existía en SQL Server. Es por eso que le agregué el sufijo "o algo similar" y luego di una definición de una secuencia como referencia.
Mike Pone

3
SQL Server 2012 tiene SEQUENCE s.
Nick Chammas
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.