2010-03-20 64 views
3

我嘗試了很多命令來禁用我的數據庫中的表約束來截斷所有表,但現在仍然給我同樣的錯誤
無法截斷表「',因爲它正在被FOREIGN KEY約束引用。
我嘗試禁用所有表上的外鍵約束不起作用?

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 
EXEC sp_MSforeachtable "TRUNCATE TABLE ?" 

和我想這對每個表

ALTER TABLE [Table Name] NOCHECK CONSTRAINT ALL 
truncate table [Table Name] 
ALTER TABLE [Table Name] CHECK CONSTRAINT ALL 

和我以前的錯誤消息..任何可以請幫我解決蘇哈一個問題,每次?

回答

5

如果要截斷表,可能必須刪除外鍵並將其添加回去。從here

「不能在由FOREIGN KEY約束引用的表上使用TRUNCATE TABLE;而是使用不帶WHERE子句的DELETE語句,因爲TRUNCATE TABLE未記錄,所以無法激活觸發器。

類似的問題here在SO。

+1

的確。 TRUNCATE需要DROP。 – gbn 2010-03-20 12:14:34

+0

從第一個鏈接開始:「不能在由FOREIGN KEY約束引用的表上使用TRUNCATE TABLE;而是使用DELETE語句,而不使用WHERE子句**。」 (強調我的。) – ladenedge 2011-03-22 18:44:10

1

我認爲這是一個相當糟糕的主意。在數據庫的所有表上盲目運行這些SQL命令並不是一個好主意。

你究竟想要做什麼?

如果你想用同樣的表創建一個數據庫的副本(沒有數據),你可以很容易地使用SSIS包來做到這一點(只要確保複製數據)選項設置爲False

http://www.kodyaz.com/articles/transfer-sql-server-objects-task.aspx alt text http://www.kodyaz.com/images/articles/transfer-SQL-Server-Objects-Task/objects-tab.JPG