2011-04-13 25 views
8

¿Cómo se vería mi instrucción SQL (MS-SQL) si quisiera insertar una fila en una tabla, que contiene solo una columna con la identificación autogenerada?Insertar id (autogenerado, solo columna)

dos consultas siguientes no funcionarán:

INSERT INTO MyTable (MyTableId) VALUES (Null) 
-- or simply 
INSERT INTO MyTable 

Thx por cualquier tips sobre el tema. sl3dg3

+2

¿Por qué quieres una tabla con una columna y que una columna marcada como la columna de identidad? – Chandu

+0

Más sobre @Cybermate comentarios, por qué desea insertarlo;) – Anuraj

+0

@Cybernate - Eso es fácil - para compatibilidad/portabilidad con un archivo ejecutable en Oracle, que no tiene columnas de identidad (en su lugar, utiliza secuencias). Una tabla como esta se puede usar para emular una secuencia de Oracle. Todavía tendrá que modificar su consulta un poco por plataforma, pero al menos (junto con algunos otros pasos) permite que las definiciones de la tabla sean las mismas. –

Respuesta

14

INSERT INTO MyTable (MyTableId) VALUES (Null) trata implícitamente al insertar un valor nulo en la columna de identidad, por lo que no funciona como columnas de identidad no pueden ser anulable y sin una opción SET no puede insertar un valor arbitrario de todos modos, en su lugar puede utilizar:

INSERT INTO MyTable DEFAULT VALUES 
1

por el bien integridad, el estándar SQL y la mayoría de las bases de datos apoyan la cláusula DEFAULT VALUES para esto:

INSERT INTO MyTable DEFAULT VALUES; 

este está soportado en

  • CUBRID
  • Firebird
  • H2
  • HSQLDB
  • Ingres
  • PostgreSQL
  • SQLite
  • SQL Server (base de datos)
  • Sybase SQL Anywhere

Si no se admite lo anterior, todavía se puede escribir esta declaración como una solución:

INSERT INTO MyTable (MyTableId) VALUES (DEFAULT); 

Esto entonces también trabajar con:

  • acceso
  • DB2
  • MariaDB
  • MySQL
  • Oracle

Para más detalles, ver esta entrada del blog aquí:

http://blog.jooq.org/2014/01/08/lesser-known-sql-features-default-values/

Cuestiones relacionadas