我可以创建一个带有检查约束的表,其值取决于sql查询
是否可以创建一个表,该表对其中一个列具有检查约束,该列的值位于另一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您无法通过外键引用实现您想要的目标,那么如果您将 SELECT 语句包装在函数调用中,则可以实现。
您的检查约束表达式可能看起来像这样:
函数可能看起来像这样(假设列是 varchar):
编辑 (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:
The function might look like this (assuming the column is a varchar):
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.是:相同数据库链接的外键
如果是不同的数据库,则使用代码,例如通过存储过程插入或通过触发器强制执行
Yes: foreign key for same database links
If it's a different database then use code e.g. insert via stored proc or enforce via a trigger