如何在不删除子表的情况下删除有约束的表?
问题描述:
我有60个表格,我想把这10个表格丢掉。但是,当放弃这10个时,它显示FK约束错误。有没有办法通过禁用约束来删除这些表而不删除其他表?如何在不删除子表的情况下删除有约束的表?
我也截断了引用表中的所有数据,还显示了FK约束错误。
我的目标是删除一个表而不删除这些表中的其他FK表。
答
使用这个SQL语句,你可以列出引用给定表的所有FK约束 - 我还提供了SQL命令删除该被引用您的 表FK约束:
DECLARE @TableName SYSNAME
SET @TableName = 'dbo.YourTableNameHere'
;WITH ReferencingFK AS
(
SELECT
fk.Name AS 'FKName',
OBJECT_NAME(fk.parent_object_id) 'ParentTable',
cpa.name 'ParentColumnName',
OBJECT_NAME(fk.referenced_object_id) 'ReferencedTable',
cref.name 'ReferencedColumnName'
FROM
sys.foreign_keys fk
INNER JOIN
sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN
sys.columns cpa ON fkc.parent_object_id = cpa.object_id AND fkc.parent_column_id = cpa.column_id
INNER JOIN
sys.columns cref ON fkc.referenced_object_id = cref.object_id AND fkc.referenced_column_id = cref.column_id
)
SELECT
FKName,
ParentTable,
ParentColumnName,
ReferencedTable,
ReferencedColumnName,
DropCmd = 'ALTER TABLE dbo.' + ParentTable + ' DROP CONSTRAINT [' + FKName + ']'
FROM
ReferencingFK
WHERE
ReferencedTable = @TableName
ORDER BY
ParentTable, ReferencedTable, FKName
所以把在您想要放入@TableName
变量的10个表格之一并运行该表格。您应该得到一个输出,其中显示引用该表的所有FK约束,包括具有ALTER TABLE .... DROP CONSTRAINT ....
命令的列从系统中删除该约束(只是约束!不是其他表)。
您不需要删除“其他”表 - 您只需要删除您想要删除的表中存在的**外键约束** – 2013-02-20 06:23:58
我的表正在被许多表中的FK重写,所以我需要删除所有这些表的外键约束? – Out 2013-02-20 06:26:38
是的,你需要这样做。看看我的回应 – 2013-02-20 06:28:34