我想添加一个约束的列取决于不同的表中的一列。 例如,如果在表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. 带约束的Sql服务器复制?
- 3. MS SQL服务器交叉表约束
- 4. 密码检查约束SQL服务器
- 5. SQL服务器:约束和外键
- 6. T-SQL锁定SQL服务器的唯一约束条件
- 7. 添加自动增量列和处理约束[SQL服务器]
- 8. SQL服务器 - 检查约束“不工作”
- 9. 多重约束/ SQL服务器/ EF代码优先
- 10. SQL服务器错误:INSERT语句与CHECK约束冲突
- 11. SQL服务器外键约束引用了无效的表
- 12. 在SQL服务器中创建表添加约束和默认
- 13. SQL服务器的外键约束问题
- 14. SQL服务器/ TSQL更新表具有唯一约束
- 15. SQL服务器外键约束 - 对(相同的元组)
- 16. 如何检查Sql服务器中是否存在约束?
- 17. SQL服务器:删除行,如果没有约束错误
- 18. SQL服务器过滤索引唯一约束
- 19. SQL服务器 - 删除约束,并添加默认值一次
- 20. SQL服务器的外键约束错误
- 21. SQL服务器 - 约束,以防止在同一时间
- 22. SQL Server - 约束
- 23. SQL,约束CHECK
- 24. SQL Server约束
- 25. SQL服务器字段命名约定
- 26. 报告服务参数约束
- 27. SQL主键约束
- 28. 检查sql约束
- 29. SQL检查约束
- 30. SQL复数约束