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


78

我有一个这样的表:

create table1 (field1 int,
               field2 int default 5557,
               field3 int default 1337, 
               field4 int default 1337)

我想插入一个具有field2和field4默认值的行。

我已经尝试过了,insert into table1 values (5,null,10,null)但是它不起作用,ISNULL(field2,default)也不起作用。

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


2
有关所有列均具有默认值的情况,另请参见此问题
stakx-不再贡献

1
请不要在未定义方式的情况下发布“无效”的信息。
underscore_d

Answers:


86

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

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

......将采取默认值field2field4,并分配到5field1和10 field3


1
如果列未定义默认值,并且还设置为“ NOT ALLOW NULLS”怎么办?

2
@Danon这不是OP的问题。请发布新问题,而不要留下这样的评论。不过,我什至都猜不到您在问什么,因为试图将默认值插入没有定义默认值并且是NOT NULL…的列是没有
道理的

@binki也许我应该改写我的评论:“ aroth:当列未定义默认值且还设置为'NOT ALLOW NULLS'时,由于可能的例外,您的答案不完整”
Danon

1
@Danon-OP指出“我要插入具有field2和field4默认值的行”,并询问“插入行时如何告知数据库该列使用默认值?”。你是正确的,当默认值这个答案没有覆盖的情况下没有定义,但因为这个问题被明确问它不是真正准确地描述答案是不完整的话。您正在谈论一个完全不同的问题(最好将其作为一个单独的问题提出)。
aroth

155

最佳做法是列出您的列,因此您不受表更改(新列或列顺序等)的影响

insert into table1 (field1, field3)  values (5,10)

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

insert into table1 values (5, DEFAULT, 10, DEFAULT)

13
太棒了!这正是我想要的。注意:您还可以指定列和值,传递DEFAULT而不是NULL,如果存在DEFAULT约束,则将获得默认值;如果该列为可空并且未指定默认约束,则将获得NULL。
约翰

2
工作,但是当我尝试使用被看中(CASE WHEN This = That THEN 'SpecifiedValue' ELSE DEFAULT END)那就不是工作,这让我懊恼。我仍然必须准备多个Insert-Statement来涵盖我的所有情况,或者使用Dynamic-SQL。:(
MikeTeeVee

由于某种原因,我无法使用SQLite的数据库浏览器进行此工作。继续抱怨语法错误DEFAULT。我必须像上面的示例中那样指定非默认列,然后为这些列提供值,然后终于可以了。
Matheson威尔

官方文件没有提到这一点。这样使用DEFAULT安全吗?(如果未记录,则在将来的sqlite3版本中省略该功能时恕不另行通知。)
ynn

@ynn此外,《使用SQLite》(第326页)一书说:“除了将列从列列表中删除,或者知道默认值是什么,然后显式插入它之外,没有其他方法可以指定默认值。 ”。
ynn

40

最好的方法是:

insert your_table
default values

5
如果所有列都具有关联的默认值并且不想指定列名,则此方法有效。
umbersar

5
尽管这不一定是所提问题的完整答案,但您不小心回答了我所提的问题,所以谢谢:)
Ryan

5

像这样尝试

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

然后,field2和field4应该具有默认值。


3

如果您的列不应包含NULL值,则还需要定义列NOT NULL,否则NULL将使用传入的值而不是默认值,并且不会产生错误。

如果你不传递任何值,这些字段(这需要你指定你的字段希望使用)时,将使用默认值:

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

1

你可以这样写

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

0

要插入默认值,您应该忽略它们,例如:

Insert into Table (Field2) values(5)

如果已定义,所有其他字段将为null或它们的默认值。


-5
CREATE PROC SP_EMPLOYEE                             --By Using TYPE parameter and CASE  in Stored procedure
(@TYPE INT)
AS
BEGIN
IF @TYPE=1
BEGIN
SELECT DESIGID,DESIGNAME FROM GP_DESIGNATION
END
IF @TYPE=2
BEGIN
SELECT ID,NAME,DESIGNAME,
case D.ISACTIVE when 'Y' then 'ISACTIVE' when 'N' then 'INACTIVE' else 'not' end as ACTIVE
 FROM GP_EMPLOYEEDETAILS ED 
  JOIN  GP_DESIGNATION D ON ED.DESIGNATION=D.DESIGID
END
END

6
我不认为这是答案。
朱利奥·卡钦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.