“默认”约束问题

时间:2011-03-01 12:13:01

标签: sql sql-server

我创建了下表

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

当我没有插入任何'type'值时,通过table的定义,它应该采用默认值。但是当我通过'select'查询获取所有行时,它不会显示默认值。

谁能告诉我这是什么问题?

谢谢&问候,
POOJA。

2 个答案:

答案 0 :(得分:1)

默认值适用于默认处于活动状态时插入的数据,而不适用于针对表格的select语句。

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

有这个结果

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

在第1行和第2行中指定列的值时不使用默认约束,但在省略插入列或指定default时使用它。执行选择时也不会使用它。

如果您想在选择时使用默认值而不是null,则可以使用coalesce

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

结果

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