2011-04-13 139 views
8

如果我不想向表中插入一行,其中包含只有一列包含自动生成的ID,我的SQL语句(MS-SQL)应该如何显示?插入ID(自动生成,仅列)

以下两个查询将不工作:

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

THX任何的窍门。 sl3dg3

+2

为什么你想有一列和一个列标记为标识列的表? – Chandu 2011-04-13 14:53:51

+0

更多关于@Cyber​​mate评论,为什么要插入到它;) – Anuraj 2011-04-13 14:57:14

+0

@Cyber​​nate - 这很容易 - 兼容性/可移植性与运行在Oracle,没有身份列(它使用序列代替)的数据库。这样的表格可以用来模拟Oracle序列。您仍然需要对每个平台的查询进行调整,但至少(以及其他几个步骤)可以使您的表定义相同。 – 2011-04-13 15:00:04

回答

14

INSERT INTO MyTable (MyTableId) VALUES (Null)隐含试图插入一个空到标识列,所以这是行不通的身份列可能永远不会为空的,并没有SET选项,你也看不插入任意值,而是可以使用:

INSERT INTO MyTable DEFAULT VALUES 
1

为了完整性,SQL标准和大多数数据库支持DEFAULT VALUES子句此:

INSERT INTO MyTable DEFAULT VALUES; 

支持
  • CUBRID
  • 火鸟
  • H2
  • HSQLDB
  • 安格尔
  • PostgreSQL的
  • SQLite的
  • SQL服务器(数据库)
  • Sybase SQL Anywhere的

如果上面不支持,你仍然可以写这个语句作为一种变通方法:

INSERT INTO MyTable (MyTableId) VALUES (DEFAULT); 

这将随后还一起工作:

  • 访问
  • DB2
  • MariaDB的
  • MySQL
  • Oracle

有关详细信息,请参阅本博客张贴在这里:

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