0

是否可以创建一个表,该表对其中一个列具有检查约束,该列的值位于另一个 sql 查询给出的结果集中

例如。

create table tablename
(
name varchar(10),
rollno int
)check rollno in (select rollno from anotherDatabase.TableName,candidateRoll)

或任何类似的东西。

我不必在任何地方使用它,但仍然想知道。

4

2 回答 2

2

如果您无法通过外键引用实现您想要的,那么您可以将 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。

于 2010-06-08T10:30:27.117 回答
1

是:相同数据库链接的外键

create table tablename
(
name varchar(10),
rollno int FOREIGN KEY (candidateRoll) REFERENCES OtherTableName (candidateRoll)
)

如果它是不同的数据库,则使用代码,例如通过存储过程插入或通过触发器强制执行

于 2010-06-08T10:29:25.200 回答