Tsql 如何在SQL表中插入默认值?

Tsql 如何在SQL表中插入默认值?,tsql,insert,default,Tsql,Insert,Default,我有一张这样的桌子: create table1 (field1 int, field2 int default 5557, field3 int default 1337, field4 int default 1337) 我想插入一行,该行具有字段2和字段4的默认值 我已经尝试将插入到表1中的值(5,null,10,null)但它不起作用,ISNULL(field2,默认)也不起作用 当我插入一行时

我有一张这样的桌子:

create table1 (field1 int,
               field2 int default 5557,
               field3 int default 1337, 
               field4 int default 1337)
我想插入一行,该行具有字段2和字段4的默认值

我已经尝试将
插入到表1中的值(5,null,10,null)
但它不起作用,
ISNULL(field2,默认)
也不起作用

当我插入一行时,如何告诉数据库使用列的默认值?

像这样尝试

INSERT INTO table1 (field1, field3) VALUES (5,10)

然后,字段2和字段4应具有默认值。

如果列不应包含
NULL
值,则需要将列定义为
not NULL
,否则将使用传入的
NULL
代替默认值,并且不会产生错误

如果未向这些字段传递任何值(这要求您指定要使用的字段),将使用默认值:

INSERT INTO 
  table1 (field1, field3) 
VALUES   (5,10)

只是不要在insert语句中包含要使用默认值的列。例如:

INSERT INTO table1 (field1, field3) VALUES (5, 10);

…将获取
字段2
字段4
的默认值,并将5分配给
字段1
,将10分配给
字段3
,要插入默认值,您应该省略它们,如下所示:

Insert into Table (Field2) values(5)

所有其他字段都将具有空值或其默认值(如果已定义)。

最佳做法是列出您的列,这样您就可以不受表更改(新列或列顺序等)的影响

但是,如果不想这样做,请使用
DEFAULT
关键字

insert into table1 values (5, DEFAULT, 10, DEFAULT)
最好的办法是:

insert into your_table
default values

你可以这样写

GO
ALTER TABLE Table_name  ADD
column_name decimal(18, 2) NOT NULL CONSTRAINT Constant_name DEFAULT 0
GO
ALTER TABLE Table_name SET (LOCK_ESCALATION = TABLE)
GO
COMMIT

令人惊叹的!这正是我想要的。注意:您还可以指定列和值,传递DEFAULT而不是NULL,如果有默认约束,您将获得默认值;如果列可为NULL且未指定默认约束,则将获得NULL。这确实有效,但当我尝试使用
时(当This=than'SpecifiedValue'时为CASE,否则默认结束)
这行不通,让我很懊恼。我仍然需要准备多个Insert语句来覆盖我的所有场景,或者使用动态SQL:(由于某些原因,我无法使用SQLite的DB Browser实现这一点。我一直在抱怨
DEFAULT
周围的语法错误。我必须像上面的示例中那样指定非默认列,然后只为这些列提供值,然后它终于起作用了。没有任何说明。使用
DEFAULT
安全吗?(如果没有文档记录,我们不能抱怨在未来版本的sqlite3中未经任何通知就忽略了该功能。)@ynn此外,这本书(第326页)说,“除非将列从列列表中删除,或者知道默认值是什么并显式插入,否则无法指定默认值。”。有关所有列都具有默认值的情况,请参见。请不要在未定义如何操作的情况下发布“不工作”。如果列未定义默认值并且也设置为“不允许空值”,该怎么办?@Danon OP的问题不是这样问的。请发布一个新问题,而不是留下这样的评论。我甚至猜不出你在问什么,因为尝试在一个列中插入一个默认值是没有定义默认值且
不为空的
。@binki也许我应该ephrase我的评论:“aroth:您的答案不完整,因为当该列未定义默认值并且也设置为“不允许为null”时可能会出现异常@Danon-OP声明“我想插入一行,该行具有字段2和字段4的默认值”,并询问“当我插入行时,如何告诉数据库使用列的默认值?“。您的回答不包括未定义默认值的情况,这是正确的,但是,由于问题明确没有询问该情况,因此将答案描述为不完整并不准确。您谈论的是一个完全不同的问题(最好作为单独的问题问)。我不认为这是一个答案。如果所有列都有关联的默认值,并且其中一列不想指定列名,则此选项有效。虽然这不一定是所问问题的完整答案,但您意外地回答了我的一个问题,因此,感谢:)
insert into your_table
default values
GO
ALTER TABLE Table_name  ADD
column_name decimal(18, 2) NOT NULL CONSTRAINT Constant_name DEFAULT 0
GO
ALTER TABLE Table_name SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
CREATE TABLE #dum (id int identity(1,1) primary key, def int NOT NULL default(5), name varchar(25))

-- this works
INSERT #dum (def, name) VALUES (DEFAULT, 'jeff')

SELECT * FROM #dum;

DECLARE @some int 

-- this *doesn't* work and I think it should
INSERT #dum (def, name)
VALUES (ISNULL(@some, DEFAULT), 'george')

SELECT * FROM #dum;