如何在sql server中创建依赖于其他列的默认约束

时间:2013-03-20 10:55:45

标签: sql sql-server sql-server-2008 tsql tsqlt

我有一张这样的表

tab1

create table tab1(ID int identity(1,1), Type varchar(10),IsValued bit)

TAB1:

ID Type IsValued
----------------
1   S   1
2   R   0
3   R   0
4   S   1
5   S   1
6   R   0
7   S   1

而不是将值插入IsValued列 我想在Type =' S'时创建一个约束(NOT TRIGGER)。 ,IsValued应插入为1 当Type =' R' ,IsValued应插入为0

喜欢:IsValued = case when Type ='S' then 1 when Type ='R' then 0 end

我怎样才能做到这一点..

1 个答案:

答案 0 :(得分:4)

您想要一个计算列。例如:

CREATE TABLE tab1
(
 ID INT IDENTITY(1,1)
,[Type] VARCHAR(10)
,IsValued AS CASE [Type] WHEN 'S' THEN 1
                         WHEN 'R' THEN 0
             END
)

您可以使用以下语法添加到现有表:

ALTER TABLE dbo.tab1 ADD IsValued AS CASE [Type] WHEN 'S' THEN 1
                                                 WHEN 'R' THEN 0
                                     END

您可以在创建列后添加关键字PERSISTED来保持列的持久性。保留列意味着该字段存储在磁盘上。插入或更新记录时,SQL Server将在该点计算出值。如果不这样做,SQL Server将不得不在每次访问行时将其解决。可以在SQL Server 2005 Computed Column Is Persisted

找到一个很好的解释
ALTER TABLE dbo.tab1 ADD IsValued AS CASE [Type] WHEN 'S' THEN 1
                                                 WHEN 'R' THEN 0
                                     END PERSISTED