1

我有 60 张桌子,我想删除其中的 10 张桌子。但是在删除这 10 个时,它显示了 FK 约束错误。有没有办法通过禁用约束来删除这些表而不删除其他表?

我也截断了引用表中的所有数据,仍然显示 FK 约束错误。

我的目标是在不删除其他表的情况下删除一个表,这些表是这些表的 FK。

4

1 回答 1

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 ....系统中删除该约束(只是约束!不是其他表)的命令的列。

于 2013-02-20T06:27:08.207 回答