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

SQL如何删除动态命名的外键约束,sql,sql-server,Sql,Sql Server,我使用以下代码在表上创建了外键约束: ALTER TABLE [dbo].[TableWithForeignKeyConstraint] WITH CHECK ADD FOREIGN KEY([PrimaryTable]) REFERENCES [dbo].[PrimaryTable] ([Id]) 外键约束的名称是动态生成的,因此在生产服务器上有一个我无法预测的名称(我无法访问生产服务器) 现在,我还创建了一个新表NewPrimaryTable,我希望具有外键约束的表删除该约束,并创建一个新

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

ALTER TABLE [dbo].[TableWithForeignKeyConstraint] WITH CHECK ADD FOREIGN KEY([PrimaryTable])
REFERENCES [dbo].[PrimaryTable] ([Id])
外键约束的名称是动态生成的,因此在生产服务器上有一个我无法预测的名称(我无法访问生产服务器)


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

@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 Pelled始终命名您的约束。

您可以这样做来列出外键:
从sys.tables中选择t.name作为table\u name,从sys.tables中选择f.name作为foreign\u key\u name,在f.parent\u object\u id=t.object\u id中选择sys.foreign\u keys又一个提醒,为什么你应该总是命名你的约束条件……给@RichardHansell添加一点动态SQL,我建议你对OP有一个答案:)