2
我有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 ....
命令的列從系統中刪除該約束(只是約束!不是其他表)。
您不需要刪除「其他」表 - 您只需要刪除您想要刪除的表中存在的**外鍵約束** – 2013-02-20 06:23:58
我的表正在被許多表中的FK重寫,所以我需要刪除所有這些表的外鍵約束? – Out 2013-02-20 06:26:38
是的,你需要這樣做。看看我的迴應 – 2013-02-20 06:28:34