我有一张这样的 table
选项卡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' 时创建一个约束(不触发),IsValued 应插入为 1 当 Type ='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 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
关于sql - 如何在sql server中创建依赖于其他列的默认约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15521546/