我有一张这样的表
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
我怎样才能做到这一点..
答案 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