4

我有一张这样的桌子

选项卡1

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

选项卡1:

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

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

4

1 回答 1

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
于 2013-03-20T11:01:52.237 回答