是否可以创建一个表,该表对其中一个列具有检查约束,该列的值位于另一个 sql 查询给出的结果集中
例如。
create table tablename
(
name varchar(10),
rollno int
)check rollno in (select rollno from anotherDatabase.TableName,candidateRoll)
或任何类似的东西。
我不必在任何地方使用它,但仍然想知道。
是否可以创建一个表,该表对其中一个列具有检查约束,该列的值位于另一个 sql 查询给出的结果集中
例如。
create table tablename
(
name varchar(10),
rollno int
)check rollno in (select rollno from anotherDatabase.TableName,candidateRoll)
或任何类似的东西。
我不必在任何地方使用它,但仍然想知道。
如果您无法通过外键引用实现您想要的,那么您可以将 SELECT 语句包装在函数调用中。
您的检查约束表达式可能类似于:
(dbo.SomeFunction([col1]) != 0)
该函数可能如下所示(假设列是 varchar):
create function dbo.SomeFunction(@arg varchar(max))
returns bit
as
begin
return
(
select count(*) from SomeOthertable where col2 = @arg
)
end
编辑(2010/06/9):关于 Anthony 的评论,我的测试表明count(*)
大于 1 的值仍然返回为 1。所以看起来该函数没问题,即使它可能应该显式返回 1 或 0 . 或者,如果您对实际行数感兴趣,请将返回类型从 BIT 更改为 INT。
是:相同数据库链接的外键
create table tablename
(
name varchar(10),
rollno int FOREIGN KEY (candidateRoll) REFERENCES OtherTableName (candidateRoll)
)
如果它是不同的数据库,则使用代码,例如通过存储过程插入或通过触发器强制执行