如果我有一个包含所有默认列的SQL表(例如标识列+任何列数都具有默认值),那么插入没有给出显式值的行的SQL语句是什么?
insert MyTable /* ( doh, no fields! ) */
-- values( doh, no values! )
诀窍是什么?
答案 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;