Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL使用check添加外键约束_Sql_Sql Server - Fatal编程技术网

SQL使用check添加外键约束

SQL使用check添加外键约束,sql,sql-server,Sql,Sql Server,我有下面的查询,它正在添加containt。 但是为了添加,我想检查这个密钥是否已经被使用过 ALTER TABLE HL7_MessageHierarchy ADD CONSTRAINT fk_vMessageType FOREIGN KEY (vMessageType) REFERENCES HL7_MessageType(vMessageType); 比如说。如果我必须添加一列,我可以很容易地检查表是否存在于sysobjects中,以及它各自的列是否存在于sysco

我有下面的查询,它正在添加containt。 但是为了添加,我想检查这个密钥是否已经被使用过

ALTER TABLE HL7_MessageHierarchy  
 ADD CONSTRAINT fk_vMessageType FOREIGN KEY (vMessageType) 
       REFERENCES HL7_MessageType(vMessageType);
比如说。如果我必须添加一列,我可以很容易地检查表是否存在于sysobjects中,以及它各自的列是否存在于syscolumns中

是否可以多次使用该查询而不必去做任何错误呢?如果是,那么如何

[编辑]

我不知道为什么我的浏览器不允许我添加评论,所以我要添加到编辑

我想检查是否存在同名的外键。因此,即使没有数据,查询也会出现问题,因为密钥可能已经存在。我想干净地运行上面的脚本(当然常驻数据很重要,但这可能是一个直接的检查?) [编辑]

我的错,我一定知道版本很重要。。。我相信是2005年。。。(我很想知道是否有人也能说出其他版本)

我想你是说

检查HL7_MessageHierarchy中是否有不在HL7_MessageType中的值”

这样的查询会告诉你

SELECT *
FROM HL7_MessageHierarchy H
WHERE NOT EXISTS (SELECT *
      FROM HL7_MessageType T 
      WHERE H.vMessageType = T.vMessageType)
另外,我建议也使用CHECK

ALTER TABLE HL7_MessageHierarchy WITH CHECK ADD
 CONSTRAINT fk_vMessageType FOREIGN KEY (vMessageType) 
       REFERENCES HL7_MessageType(vMessageType);

在SQL 2005中,检查对象是否存在的推荐方法是。您需要的方法是
sys.foreign\u 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
中,以避免混淆解析器。

事实上,我在工作场所遇到了一些问题-无法接受之前有用的答案。谢谢。我需要类似的内容。谢谢,尽管检查非常重要,但@AakashM收到了我的问题。。。