我需要删除 SQL Server 数据库中高度引用的表。如何获取删除表所需删除的所有外键约束的列表?
(SQL 回答比在管理工作室的 GUI 中单击 about 更可取。)
原文由 chillitom 发布,翻译遵循 CC BY-SA 4.0 许可协议
我需要删除 SQL Server 数据库中高度引用的表。如何获取删除表所需删除的所有外键约束的列表?
(SQL 回答比在管理工作室的 GUI 中单击 about 更可取。)
原文由 chillitom 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是我认为在 SQL Server 2016 中解决此方案的最佳实践。
您必须使用以下方法列出外键:
EXEC sp_fkeys 'TableName'
在那里你可以看到 FK 的完整信息。请注意列 FKTABLE_NAME、FKCOLUMN_NAME、FK_NAME、UPDATE_RULE、DELETE_RULE 是您需要删除外键并在截断后再次实现它们的信息。
您可以按如下方式组织脚本:
-- EXEC sp_fkeys 'TableName'
-- DROP CONSTRAINTS: I drop one, here drop every constraint you desire.
BEGIN TRANSACTION
GO
ALTER TABLE dbo.TableName
DROP CONSTRAINT IF EXISTS FK_TableName_OtherTable
GO
ALTER TABLE dbo.TableName SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
-- TRUNCATE
BEGIN TRANSACTION
TRUNCATE TABLE TableName
GO
COMMIT
-- RECREATE CONSTRAINTS: I recreate 1, here recreate every fk you desire
BEGIN TRANSACTION
GO
ALTER TABLE dbo.TableName SET (LOCK_ESCALATION = TABLE)
GO
ALTER TABLE dbo.TableName ADD CONSTRAINT
FK_TableName_OtherTable FOREIGN KEY
(
Id_FK
) REFERENCES dbo.OtherTable
(
Id
) ON UPDATE NO ACTION
ON DELETE NO ACTION
GO
COMMIT
\*\* UPDATE_RULE 和 DELETE_RULE 的值可以在 sp_fkeys 的文档中看到:
原文由 Sam 发布,翻译遵循 CC BY-SA 4.0 许可协议
不知道为什么没有人建议,但我使用
sp_fkeys
来查询给定表的外键:您还可以指定架构:
在不指定架构的情况下, 文档 说明以下内容: