2012-01-08 134 views
36

我有一个表是这样的:如何在SQL表中插入默认值?

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

我要插入这对于场2和字段4默认值的行。

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

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

+2

也[这个问题](http://stackoverflow.com/questions/25900996)请参阅其中*所有*列有默认值的情况下写的。 – stakx 2014-09-17 22:07:17

回答

52

刚请不要在插入语句中包含要使用默认值的列。例如:

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

...将采取默认值field2field4,并指定5 field1和10 field3

+1

如果列未定义默认值并且也设置为“NOT ALLOW NULLS”,该怎么办? – Danon 2017-01-23 20:47:08

4

尝试像这样

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

然后FIELD2和字段4应该有默认值。

2

如果列不应该包含NULL值,你需要定义的列NOT NULL为好,否则在NULL传递将使用而不是默认的,而不是产生一个错误。

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

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

插入默认值,你应该忽略他们是这样的:如果它定义

Insert into Table (Field2) values(5) 

所有其他字段将具有空或默认值。

97

最佳实践它列出您的栏,你是独立的表的更改(新的列或列的顺序等)

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

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

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

太棒了!这正是我所期待的。注意:您还可以指定列和值,传递DEFAULT而不是NULL,如果存在DEFAULT约束,您将获得默认值;如果列可为空并且未指定默认约束,则为NULL。 – John 2013-02-05 18:30:57

-2
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 
+1

我不认为这是一个答案。 – 2017-05-18 11:37:36

4

最好的办法是:

insert your_table 
default values 
+0

如果所有列都具有关联的默认值,并且不想指定列名称,则这适用。 – umbersar 2017-08-23 19:43:26

0

您可以用这种方式

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