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

时间:2012-01-08 12:08:10

标签: tsql insert default

我有一张这样的表:

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)也不起作用。

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

10 个答案:

答案 0 :(得分:126)

最好列出您的列,这样您就可以独立于表格更改(新列或列顺序等)

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

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

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

答案 1 :(得分:64)

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

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

...将采用field2field4的默认值,并将5分配给field1,将10分配给field3

答案 2 :(得分:19)

最好的方法是:

insert your_table
default values

答案 3 :(得分:5)

尝试这样

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

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

答案 4 :(得分:3)

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

如果您没有将任何值传递给这些字段(这要求您指定 想要使用的字段),则会使用默认值:

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

答案 5 :(得分: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

答案 6 :(得分:0)

要插入默认值,您应该省略它们:

Insert into Table (Field2) values(5)

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

答案 7 :(得分:0)

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;

答案 8 :(得分:0)

我有一个案例,我有一个非常简单的表格,我基本上只想要一个只有默认值的额外行。不确定是否有更漂亮的方法,但这是一种方法:

这会将新行中的每一列设置为其默认值:

INSERT INTO your_table VALUES ()

注意:这对 MySQL 尤其有用, INSERT INTO your_table DEFAULT VALUES 不起作用。

答案 9 :(得分:-3)

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