2011-04-13 196 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/