2011-03-01 162 views
0

我創建了下表問題的「默認」約束

create table interiors 
(id integer, name varchar(20), type varchar(20) default 'baby cot', price integer) 

當我不要插入「型」的任何值,表的定義,它應該採取的默認值。但是,當我通過'select'查詢獲取所有行時,它不顯示默認值。

誰能告訴我問題是什麼?

謝謝&問候,
Pooja。

+0

其實我覺得我可能會誤解你能否確認這個問題是否是你期待的默認應用到預先存在的行或不適用的問題到新插入的行?如果後者可以向我們展示您正在使用的'insert'語句?你是否明確插入'NULL'? – 2011-03-01 12:25:27

+0

看到,當我沒有在'type'列中插入任何值,然後通過'default'約束時,它應該顯示默認值。當我提取所有行時,'type'顯示沒有值。對於下一個,當我在'類型'列中插入NULL(不含引號),然後選擇查詢顯示'NULL'字。我想輸出,當我沒有插入任何東西到'類型'欄中,它應該顯示默認類型爲'嬰兒牀'。 – Pooja 2011-03-01 16:49:55

+0

如果你想讓它有默認值,爲什麼要插入'NULL'? (1,'foo',100)'或'insert into interior(id,name,type,price)values(1,'foo',DEFAULT ,100)'插入'NULL'不會有任何不同,然後插入任何其他顯式值。 – 2011-03-01 17:01:57

回答

1

默認值適用於在默認值處於活動狀態時插入的數據不針對表的select語句。

+0

我不明白你想說什麼。你能解釋更多嗎? – Pooja 2011-03-01 16:53:18

1

不知道你的問題是什麼,但這裏有一些提示你正在發生什麼。

這件T-SQL

declare @T table (ID int, Name varchar(10) default 'DEF') 

insert into @T (ID, Name) values (1, 'VAL') 
insert into @T (ID, Name) values (2, null) 
insert into @T (ID) values (3) 
insert into @T (ID, Name) values (4, default) 

select ID, Name 
from @T 

產生這樣的結果,當您指定的列的值作爲行1和2

ID   Name 
----------- ---------- 
1   VAL 
2   NULL 
3   DEF 
4   DEF 

默認約束沒有使用,但使用它你的時候省略插入列或指定default。當你做選擇時它也不會被使用。

如果你想選擇默認值而不是null,你可以使用​​3210。

select ID, coalesce(Name, 'DEF') as Name 
from @T 

結果

ID   Name 
----------- ---------- 
1   VAL 
2   DEF 
3   DEF 
4   DEF 
+1

+1。你也可以顯示'insert into @T(ID,Name)values(4,default)' – 2011-03-01 12:49:34

+0

@Martin謝謝。我不知道。 – 2011-03-01 13:07:19