9

我想从一个表中的几个外键中带一个外键。在sql server的GUI界面中,如果我们展开表选项,我们可以看到一个名为“Keys”的文件夹,在这个文件夹中有一个主键和几个外键。在我的示例中,我有三个表,客户、订单和项目。Customer 有 Customer_ID 作为主,Items 有 Item_ID 作为主,Orders 有 Order_ID 作为主,外键 Customer_nbr 引用客户 (Customer_ID),外键 item_nbr 引用 Items (Item_ID)。

所以在那个“Keys”文件夹中有这些键的名称,例如:“FK_ Orders _Customer__38996AB5”

问题是客户字后面的数字“38996AB5”不固定,如果您删除约束然后重新建立它们,它将被更改(出于安全原因左右)。

所以我正在寻找一个可以键入的 SQL 命令,以便无论它是什么样的都可以获取该密钥。从逻辑上讲,我可以使用关键字“LIKE”(即 ... like = 'FK_ Orders _Customer__%'),但我不知道如何或在哪里放置它。

提前致谢。

4

2 回答 2

8

这是另一个版本。您可以按表和我猜的父表/列名进行过滤。

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%'

更好的主意:

在创建时命名您的 FK。

ALTER TABLE [dbo].ChildTable
ADD CONSTRAINT ChildTableToParentTableFK  /* A strong name */
    FOREIGN KEY ( ParentTableKey )
        REFERENCES [dbo].ParentTable ( ParentTableKey  )
GO
于 2013-07-15T17:39:06.140 回答
2

采用:

SELECT *
FROM sys.foreign_keys
WHERE name LIKE '%yourForeignKeyName%'
于 2013-07-15T17:35:15.933 回答