如何插入只有默认值的记录?

时间:2009-11-19 15:54:40

标签: sql-server

如果我有一个包含所有默认列的SQL表(例如标识列+任何列数都具有默认值),那么插入没有给出显式值的行的SQL语句是什么?

insert MyTable /* ( doh, no fields! ) */ 
-- values( doh, no values! )

诀窍是什么?

3 个答案:

答案 0 :(得分:76)

这是INSERT语法的一部分

INSERT INTO TableName DEFAULT VALUES 

在这里阅读更多内容

http://msdn.microsoft.com/en-us/library/aa933206%28SQL.80%29.aspx

答案 1 :(得分:3)

您可以使用DEFAULT关键字

答案 2 :(得分:0)

接受的答案仅适用于一行,不适用于多行。

让我们假设您知道要插入多少行,但您想要所有默认值。您不能执行以下操作,例如

INSERT MyTable
SELECT DEFAULT VALUES  -- Incorrect syntax near the keyword 'DEFAULT'.
FROM SomeQueryOrView;
-- or
INSERT MyTable
DEFAULT VALUES  -- Incorrect syntax near the keyword 'FROM'.
FROM SomeQueryOrView;

相反,我们可以 hack MERGE 来做到这一点

MERGE INTO myTable
USING (SELECT SomeValue FROM SomeQueryOrView) s
ON 1 = 0  -- never match
WHEN NOT MATCHED THEN
    INSERT DEFAULT VALUES;

一个额外的好处是我们可以从未插入的列中OUTPUT 数据:

MERGE INTO myTable
USING (SELECT SomeValue FROM SomeQueryOrView) s
ON 1 = 0  -- never match
WHEN NOT MATCHED THEN
    INSERT DEFAULT VALUES
OUTPUT inserted.Id, s.SomeValue;