我有这样一个表
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列我想创建一个约束(不触发)时类型=“S”,IsValued应插入为1,并且当类型=“R”,IsValued应插入为0
像: IsValued = case when Type ='S' then 1 when Type ='R' then 0 end
我怎样才能做到这一点..
你想要一个计算列。 例如:
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服务器将计算出该点的值。 如果不这样做,SQL Server将在每次访问行的时间去解决它。 一个很好的解释,可以发现SQL Server 2005的计算列持久化
ALTER TABLE dbo.tab1 ADD IsValued AS CASE [Type] WHEN 'S' THEN 1
WHEN 'R' THEN 0
END PERSISTED