2011-03-01 129 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