如何解决SQL通过检查添加外键约束
| 我有以下查询,其中添加了约束。 但为了添加,我想检查此密钥是否已被使用?ALTER TABLE HL7_MessageHierarchy
ADD CONSTRAINT fk_vMessageType FOREIGN KEY (vMessageType)
REFERENCES HL7_MessageType(vMessageType);
例如。如果我必须添加一列,我可以轻松地检查该表是否存在于sysobjects中,并且其相应的列是否存在于syscolumns中。
是否可以在没有GO的情况下多次使用查询,并且确实不会产生任何错误?如果是,那么如何?
[编辑]
我不知道为什么我的浏览器不允许我添加评论,所以我要添加到“编辑”中。
我想检查是否存在具有相同名称的外键。因此,即使没有数据,查询也会出现问题,因为该键可能已经存在。我想干净地运行上面的脚本(当然居民数据很重要,但这也许是直接检查吗?)
[编辑]
不好意思,我一定知道该版本很重要...我相信它是2005 ...(很想知道是否有人也可以提供其他版本)
解决方法
在SQL 2005中,推荐的检查对象是否存在的方法是目录视图。您想要的是
sys.foreign_keys
:
IF NOT EXISTS ( SELECT * FROM sys.foreign_keys
WHERE name = \'fk_vMessageType\' )
BEGIN
EXEC (\'
ALTER TABLE HL7_MessageHierarchy
ADD CONSTRAINT fk_vMessageType FOREIGN KEY (vMessageType)
REFERENCES HL7_MessageType(vMessageType)
\')
END
为了避免混淆解析器,我将创建的内容包装在the3中。
, 我想你是说
检查HL7_MessageHierarchy中的值是否不在HL7_MessageType \“
因此,这样的查询将告诉您
SELECT *
FROM HL7_MessageHierarchy H
WHERE NOT EXISTS (SELECT *
FROM HL7_MessageType T
WHERE H.vMessageType = T.vMessageType)
另外,我建议您也使用WITH CHECK
ALTER TABLE HL7_MessageHierarchy WITH CHECK ADD
CONSTRAINT fk_vMessageType FOREIGN KEY (vMessageType)
REFERENCES HL7_MessageType(vMessageType);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。