SQL Server:如何确定table1.col1是否在table2.col2上有外键约束?

18 浏览
0 Comments

SQL Server:如何确定table1.col1是否在table2.col2上有外键约束?

给定表1的列1,我需要确定它是否有一个外键指向表2的列2。

这个SQL将会被运行多次,所以需要相当快速。

我已经看到一些解决方案,但它们往往比我需要的要更复杂(即数据库中的所有外键或表上的所有外键)。

谢谢!

0
0 Comments

SQL Server : 如何确定table1.col1上是否有对table2.col2的外键约束

在SQL Server中,有时候我们需要确定一个表的某一列是否有外键约束,特别是在编写存储过程或触发器时。下面是一种常用的查询方法,可以将其转化为一个视图。

创建一个名为vwForeignKeys的视图,代码如下:

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
   --外键约束存在,执行相应操作
END

上述代码将通过查询vwForeignKeys视图来确定table1的column1列是否有对table2的column2列的外键约束。如果存在外键约束,则可以在BEGIN和END之间编写相应的操作。

0