给定table1.column1,我需要确定它是否有table2.column2的外键。
这个SQL将运行很多次,所以它需要相当快。
我见过一些解决方案,但是往往比我需要的更复杂(例如,数据库中的所有外键或表上的所有外键)
谢谢!
下面是我更喜欢使用的查询,做成一个视图:
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