2015-01-13 20 views
1

我試圖用SQL Server數據工具更新目標數據庫,使用發佈選項。我有自定義指令的部署前和部署後腳本。錯誤的DDL語句順序:在刪除相關外鍵約束之前刪除索引

以下是問題:SSDT嘗試從我的目標中刪除索引numero,該索引在我的參考架構中不存在,但由於它正用於約束fk_numero的外鍵實施而失敗。這個外鍵稍後會在腳本中被刪除,因爲在這個表上會做另一個更改。

我曾考慮在我的部署前腳本下探fk_numero,但它無論如何都會失敗,因爲這是在生成的腳本後稱DROP CONSTRAINT fk_numero的:因爲SSDT不刪除約束之前寫IF EXISTS測試,它失敗的時候試圖刪除不存在的內容。

我也嘗試在我的預部署腳本中使用NOCHECK CONSTRAINT ALL禁用所有外鍵,希望能夠刪除我的索引,但無濟於事。

SSDT中是否有一個選項來指定是否希望它生成DROP CONSTRAINT腳本?或者指令順序的選項?或者提示SSDT它應該在嘗試刪除之前測試約束是否存在?

回答

0

您可以嘗試「在目標但不在項目中的DROP對象」選項。

您是否使用自定義腳本來修改架構?

+0

我認爲這就是OP所說的「SSDT試圖從我的目標中刪除一個索引數字,這在我的參考模式中不存在」 –

+0

感謝您的建議,我只是試圖檢查此選項,但結果仍然是一樣的。 正如我所說的,我使用了一個自定義的預部署腳本,在該腳本中,我對目標模式應用了各種更改,例如刪除列或索引,但沒有鏈接到錯誤的東西(據我所知) 。無論如何,錯誤發生在我的自定義腳本後,在自動生成的行。 – Cal

+1

好吧,當ssdt生成它的發佈腳本時,自定義腳本不能被計入acount中,我想這就是錯誤出現的原因。 – SAS

0

我剛剛在使用SSDT時遇到過這個問題。原來,這是一個已知的bug,這是在Microsoft Connect上報告的。但是,它似乎沒有得到解決。

UPDATE:

May 2015 Update給SSDT包括修復此問題。