我想添加一个约束的列取决于不同的表中的一列。 例如,如果在表T1中我有一个字符串列str1,并且在表T2上我有一个字符串clumn str2,我希望str1为null,除了当srt2 - “ok”时。约束 - sql服务器
0
A
回答
0
你可以使用在T1触发脚本(执行前),检查时的字符串应被插入到STR1,如果STR2等于“OK”
1
在约束你不能使用SELECT,但是用户定义的功能是允许的。所以你可以创建一个函数来从T2中检索str2。下面是一个例子设置:
create table t1 (id int, str1 varchar(max))
create table t2 (str2 varchar(10))
go
create function dbo.GetStr2() returns varchar(10)
as
begin
declare @retval varchar(10)
select @retval = str2 from t2
return @retval
end
go
alter table t1 add constraint CheckStr2Constraint
check (str1 is null or dbo.GetStr2() = 'ok');
您可以测试此类似:
insert into t2 values ('ok')
insert into t1 values (1,'test') -- Succeeds
insert into t1 values (1,null) -- Succeeds
update t2 set str2 = 'not ok'
insert into t1 values (1,'test') -- Fails
insert into t1 values (1,null) -- Succeeds
第三个INSERT将失败,因为str2的是“不正常”,而你插入一个非空的字符串。错误消息将如下所示:
The INSERT statement conflicted with the CHECK
constraint "CheckStr2Constraint".
相关问题
- 1. SQL服务器约束
- 2. MS SQL服务器交叉表约束
- 3. T-SQL锁定SQL服务器的唯一约束条件
- 4. SQL服务器 - 约束,以防止在同一时间
- 5. SQL服务器错误:INSERT语句与CHECK约束冲突
- 6. SQL服务器 - 删除约束,并添加默认值一次
- 7. SQL服务器 - 检查约束“不工作”
- 8. SQL服务器:删除行,如果没有约束错误
- 9. SQL服务器/ TSQL更新表具有唯一约束
- 10. SQL服务器过滤索引唯一约束
- 11. 如何检查Sql服务器中是否存在约束?
- 12. SQL服务器的外键约束错误
- 13. 多重约束/ SQL服务器/ EF代码优先
- 14. SQL服务器外键约束 - 对(相同的元组)
- 15. SQL Server约束
- 16. SQL Server - 约束
- 17. SQL服务器字段命名约定
- 18. 报告服务参数约束
- 19. SQL约束minvalue/maxvalue?
- 20. 代表SQL约束
- 21. SQL复杂约束
- 22. SQL逻辑约束
- 23. SQL约束检查
- 24. SQL外部约束
- 25. SQL约束多表
- 26. 外键约束SQL
- 27. 检查sql约束
- 28. 删除并重新创建所有约束结合sp_MSForEachTable sql服务器
- 29. 如何删除不使用查询的sql服务器中的空约束
- 30. 何处放置默认值和唯一约束,代码或SQL服务器?