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

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

我有一张这样的 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/

相关文章:

SQL 以 "round-robin"顺序返回行

sql-server - 事务隔离级别和子查询

sql - 如何创建递归查询以获取两个日期之间的所有日期

sql-server - 选择具有特定模式的查询,在第一个位置显示特定记录

sql - SQL Server连接表和数据透视

c# - 减少数据库往返

MySQL 使用 JOIN 和报告

sql - postgres中的嵌套选择

mysql - 计算不同折扣范围的产品

sql-server - XML 查询附加适当的 ID