我可以创建一个带有检查约束的表,其值取决于sql查询

发布于 2024-09-04 21:42:49 字数 272 浏览 5 评论 0原文

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

例如。

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

或任何类似的事情。

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

Is it possible to create a table which has a check constraint on one of the column whose value lies within the result set given by another sql query

eg.

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

or any thing like that.

I dont have to use it anywhere but still want to know.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吐个泡泡 2024-09-11 21:42:49

如果您无法通过外键引用实现您想要的目标,那么如果您将 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): 关于安东尼的评论,我的测试表明count(*) 大于 1 的值仍返回为 1。因此,该函数似乎没问题,即使它可能应该显式返回 1 或 0。或者,如果您有兴趣实际行数,将返回类型从 BIT 更改为 INT。

If you can't achieve what you want with a foreign key reference, so you can if you wrap the SELECT statement in a function call.

Your check constraint expression may look something like:

(dbo.SomeFunction([col1]) != 0)

The function might look like this (assuming the column is a varchar):

create function dbo.SomeFunction(@arg varchar(max))
returns bit
as
begin
return
(
    select count(*) from SomeOthertable where col2 = @arg
)
end

EDIT (2010/06/9): Regarding Anthony's comment, my testing has shown that a count(*) value of greater than 1 is still returned as 1. So it would seem that the function is okay, even though it should probably explicitly return 1 or 0. Or, if you are interested in the actual rowcount, change the return type from BIT to INT.

护你周全 2024-09-11 21:42:49

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

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

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

Yes: foreign key for same database links

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

If it's a different database then use code e.g. insert via stored proc or enforce via a trigger

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文