基于If Then Else sql server 2008将默认值添加到现有列

use*_*126 5 sql-server sql-server-2008

是否可以更改现有列以接受基于其他列值的默认值?

对于Eg:

Create table #Temp
(
    TempId int not null
   ,TransCode int    --values of 1 / 2 or 3
   ,ReasonCode int
)
Run Code Online (Sandbox Code Playgroud)

ReasonCode的默认值基于TransCode.当TransCode为1且ReasonCode为Null时,则为99其他ReasonCode

如何添加此默认约束?

小智 2

您可以通过 CHECK 约束来做到这一点,

首先你必须创建表,

 create table myTemp1(TempId int not null ,TransCode int,ReasonCode int);
Run Code Online (Sandbox Code Playgroud)

然后将约束添加为

创建表 myTemp1(TempId int not null ,TransCode int,ReasonCode int);

alter table myTemp1
add constraint check_role CHECK(case when (TransCode = 1 AND ReasonCode = NULL)
                                then 99 else ReasonCode end = ReasonCode);
Run Code Online (Sandbox Code Playgroud)

或者喜欢

alter table myTemp1
add constraint check_role CHECK(ReasonCode = (case when (TransCode = 1 AND ReasonCode
                                = NULL) then 99 else ReasonCode end = 1))
Run Code Online (Sandbox Code Playgroud)

演示地址:http://sqlfiddle.com/#!3/d633a/1