提问者:小点点

SQL Server:如何确定table1.col1是否对table2.col2具有外键约束[重复]


给定table1.column1,我需要确定它是否有table2.column2的外键。

这个SQL将运行很多次,所以它需要相当快。

我见过一些解决方案,但是往往比我需要的更复杂(例如,数据库中的所有外键或表上的所有外键)

谢谢!


共1个答案

匿名用户

下面是我更喜欢使用的查询,做成一个视图:

CREATE VIEW vwForeignKeys AS
SELECT
   OBJECT_NAME(f.parent_object_id) TableName,
   COL_NAME(fc.parent_object_id,fc.parent_column_id) ColName,
   OBJECT_NAME (f.referenced_object_id) ReferencedTableName,
   COL_NAME(fc.referenced_object_id,fc.referenced_column_id) ReferencedColName,
   f.Name
FROM
   sys.foreign_keys AS f
INNER JOIN
   sys.foreign_key_columns AS fc
     ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN
   sys.tables t
      ON t.OBJECT_ID = fc.referenced_object_id

在您的例子中,查询看起来像这样

IF EXISTS(
   SELECT 1 
   FROM 
      vwForeignKeys 
   WHERE 
      TableName='table1' 
      AND ColName='column1' 
      AND ReferencedTableName='table2' 
      AND ReferencedColName='column2'
) THEN 
BEGIN
   --FOREIGN KEY EXISTS, DO SOMETHING
END