[英]SQL add Foreign key constraint with check
我有以下查询,其中添加了约束。 但是为了添加,我想检查这个密钥是否已经被使用?
ALTER TABLE HL7_MessageHierarchy
ADD CONSTRAINT fk_vMessageType FOREIGN KEY (vMessageType)
REFERENCES HL7_MessageType(vMessageType);
例如。 如果我必须添加一列,我可以轻松地检查该表是否存在于sysobjects中,并且其相应的列是否存在于syscolumns中。
是否可以在没有GO的情况下多次使用查询,并且确实不会产生任何错误? 如果是,那么如何?
[编辑]
我不知道为什么我的浏览器不允许我添加评论,所以我要添加到“编辑”中。
我想检查是否存在具有相同名称的外键。 因此,即使没有数据,查询也会出现问题,因为该键可能已经存在。 我想干净地运行上面的脚本(当然,驻留数据很重要,但这也许是直接检查吗?)[编辑]
不好意思,我一定知道该版本很重要...我相信它是2005 ...(很想知道是否有人也可以提供其他版本)
我想你是说
检查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);
在SQL 2005中,推荐的检查对象是否存在的方法是Catalog Views 。 您想要的是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
我将创建内容包装在EXEC
以避免混淆解析器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.