2012-01-08 133 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