SQL Server Drop Table With Foreign Key Constraint (刪除資料表)

2024-06-05

筆記 SQL Server 如何處理「無法卸除物件 'dbo.TableName',因為 FOREIGN KEY 條件約束參考該物件。」的批次刪除資料表及條件約束的方式。

SQL Server Logo

說明

首先透過 Script 找出所有的 Foreign Key Constraint 並進行刪除。

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += 'ALTER TABLE ' + QUOTENAME(tp.name) + 
               ' DROP CONSTRAINT ' + QUOTENAME(fk.name) + ';' + CHAR(13)
FROM 
    sys.foreign_keys AS fk
INNER JOIN 
    sys.tables AS tp ON fk.parent_object_id = tp.object_id;

PRINT @sql

--EXEC sp_executesql @sql;

接著就可以進行資料表刪除:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += 'DROP TABLE ' + QUOTENAME(name) + ';' + CHAR(13)
FROM 
    sys.tables;

PRINT @sql

--EXEC sp_executesql @sql;

EXEC 註解的部分是實際執行刪除的動作,在實際作業前應該要先備份並且透過 PRINT 檢視要刪除的標的是否正確,如果無誤才能夠解開註解執行 EXEC 😊