2011-12-05 45 views
17

我有一個腳本,刪除在我的數據庫中的所有表看起來像這樣:錯誤刪除所有表「刪除失敗,因爲下列SET選項的設置不正確:‘QUOTED_IDENTIFIER’」

-- Disable all constraints 
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT all' 

-- Disable all triggers 
EXEC EnableAllTriggers @Enable = 0 

-- Delete data in all tables 
EXEC sp_MSForEachTable 'DELETE FROM ?' 

-- Dnable all constraints 
EXEC sp_MSForEachTable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all' 

-- Reseed identity columns 
EXEC sp_MSForEachTable 'DBCC CHECKIDENT (''?'', RESEED, 0)' 

-- Enable all triggers 
EXEC EnableAllTriggers @Enable = 1 

當它擊中DELETE行我得到幾個表的錯誤:

由於以下SET選項具有不正確的設置,因此DELETE失敗:'QUOTED_IDENTIFIER'。驗證SET選項是否適用於計算列和/或過濾索引和/或查詢通知和/或XML數據類型方法和/或空間索引操作的索引視圖和/或索引。

我沒有任何索引視圖,所有外鍵和觸發器都被禁用,所以我不知道是什麼導致了這個錯誤。有任何想法嗎?

+0

你知道有哪些SP是通過運行它們一次一個導致了問題? –

+0

請注意,如果你想刪除表中的所有內容,請使用'TRUNCATE',因爲它速度更快。 – JNK

+1

@JNK不能截斷被外鍵引用的表(即使約束已被設置爲每個問題的「NOCHECK」)。 – Iridium

回答

35

將SET選項添加到刪除調用中。

這些仍然適用於錯誤中提及的其他項目,即使您禁用了FK。

這將解決任何保存或環境設置

編輯,註釋後

EXEC sp_MSForEachTable 'SET QUOTED_IDENTIFIER ON; DELETE FROM ?' 
+0

如何將SET選項添加到DELETE命令? – CodeGrue

+0

一個例子確實不錯... – Rob

+0

@Rob在我的情況下,它只是在腳本SET'QUOTED_IDENTIFIER'ON(例如SET ANSI_WARNINGS ON)上添加一行, – Tomek

相關問題