我有 60 张桌子,我想删除其中的 10 张桌子。但是在删除这 10 个时,它显示了 FK 约束错误。有没有办法通过禁用约束来删除这些表而不删除其他表?
我也截断了引用表中的所有数据,仍然显示 FK 约束错误。
我的目标是在不删除其他表的情况下删除一个表,这些表是这些表的 FK。
我有 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 ....
系统中删除该约束(只是约束!不是其他表)的命令的列。