我有60个表,我想要删除这些表中的10个。但是在删除这10个时,它显示出FK约束错误。有没有办法DROP这些表而不通过禁用约束来删除其他表?
我也截断了引用表中的所有数据,仍显示FK约束错误。
我的目标是DROP一个表而不删除其他表FK到这些表。
答案 0 :(得分:4)
使用此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 ....
命令的列,以删除该约束(只约束!不是另一个表)系统