如何通过T-SQL查找表的特定外键?

Alb*_*A-w 8 sql sql-server

我想从表中的几个中带出一个外键.在sql server的GUI界面中,如果我们扩展表选项,我们可以看到一个名为"Keys"的文件夹,在这个文件夹中有一个主键和几个外键.在我的例子中,我有三个表,Customer,Orders和Items.客户具有Customer_ID作为主要,Item具有Item_ID作为主要,订单具有Order_ID作为主要,外键Customer_nbr引用customer(Customer_ID)和外键item_nbr引用项目(Item_ID).

所以在"Keys"文件夹中有这些键的名称,如:"FK_ Orders _Customer__38996AB5"

问题是客户词后面的数字"38996AB5"不固定,如果你删除约束然后重新建立它们将被更改(出于安全原因等).

所以我正在寻找一个可以输入的SQL命令,以便获得该密钥,无论它是什么样的.从逻辑上讲,我可以使用关键词"LIKE"(即...喜欢='FK_ Orders _Customer __%'),但我不知道如何或在哪里放置它.

提前致谢.

gra*_*der 7

这是另一个版本.您可以按表过滤,我猜是父表/列名.

SELECT 
  [ForeignKey] = f.name
, [TableName] = OBJECT_NAME(f.parent_object_id), COL_NAME(fc.parent_object_id,fc.parent_column_id)
, [ReferenceTableName] = OBJECT_NAME (f.referenced_object_id)
, ReferenceColumnName = COL_NAME(fc.referenced_object_id, fc.referenced_column_id)
FROM 
sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
WHERE name LIKE '%the_fk_name%'
Run Code Online (Sandbox Code Playgroud)

更好的想法:

在创作时命名你的FK.

ALTER TABLE [dbo].ChildTable
ADD CONSTRAINT ChildTableToParentTableFK  /* A strong name */
    FOREIGN KEY ( ParentTableKey )
        REFERENCES [dbo].ParentTable ( ParentTableKey  )
GO
Run Code Online (Sandbox Code Playgroud)


Lam*_*mak 2

使用:

SELECT *
FROM sys.foreign_keys
WHERE name LIKE '%yourForeignKeyName%'
Run Code Online (Sandbox Code Playgroud)