SQL如何删除动态命名的外键约束

时间:2018-11-06 11:20:08

标签: sql sql-server

我使用以下代码在表上创建了外键约束:

ALTER TABLE [dbo].[TableWithForeignKeyConstraint] WITH CHECK ADD FOREIGN KEY([PrimaryTable])
REFERENCES [dbo].[PrimaryTable] ([Id])

外键约束的名称是动态生成的,因此在生产服务器上具有我无法预测的名称(我无法访问生产服务器)。

现在我还创建了一个新表NewPrimaryTable,并且我希望具有外键约束的表删除该约束并为NewPrimaryTable创建一个新表。

1 个答案:

答案 0 :(得分:1)

@Richard Hansell使我走上了正确的道路,我现在使用以下查询来查找所述外键约束的名称:

SELECT fk.name
FROM
    sys.foreign_keys fk
INNER JOIN 
    sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN 
    sys.tables parent_tables ON fk.parent_object_id = parent_tables.object_id
INNER JOIN 
    sys.columns parent_columns ON fkc.parent_object_id = parent_columns.object_id AND fkc.parent_column_id = parent_columns.column_id
INNER JOIN
    sys.tables referenced_tables ON fk.referenced_object_id = referenced_tables.object_id
INNER JOIN 
    sys.columns referenced_columns ON fkc.referenced_object_id = referenced_columns.object_id AND fkc.referenced_column_id = referenced_columns.column_id
WHERE parent_tables.name = 'TableWithForeignKeyConstraint'
AND referenced_tables.name = 'PrimaryTable'
AND parent_columns.name = 'ForeignKeyColumn'
AND referenced_columns.name = 'Id'

我也非常同意Zohar Peled总是提出您的限制条件。