2016-07-04 46 views
0

我正在使用Flyway來爲我的SQL Server 2014數據庫進行數據庫版本控制。我有800多個存儲過程。QUOTED_IDENTIFIER在使用Flyway遷移800多個存儲過程時在某些存儲過程中引發

在初始遷移中,對於大約394個存儲過程,QUOTED_IDENTIFIER設置爲OFF。但是,當我單獨遷移它作爲唯一存儲過程時,QUOTED_IDENTIFIER設置爲ON

總是默認值QUOTED_IDENTIFIERON

我試着在JTDS連接字符串中設置QUOTED_IDENTIFIER的值(QUOTED_IDENTIFIER=ON)但沒用。

有沒有解決方法?

回答

1

Quoted_IdentifierAnsi_Nulls和其他一些討厭的屬性是「粘」。 Quoted_Identifier的當前狀態(在會話中)控制在創建新引入的過程或函數時「粘貼」什麼。有些工具更好,有些更糟糕的是,將腳本插入前面的create procedurecreate function語句。在查看數據庫中的源代碼時,您可能會也可能不會看到生成的語句......取決於您使用的工具。

這些屬性被捕獲到sys.sql_modules中,它具有源文本和uses_ansi_nullsuses_quoted_identifier以及其他粘性屬性的狀態。您可以使用這些標誌來了解如何在過程和/或功能之前編寫任何語句的腳本。

+0

我想知道爲什麼'Quoted_Identifier'屬性只設置爲'OFF'對於某些存儲過程。舉個例子,如果我執行46個存儲過程中的6個'Quoted_Identifier'屬性設置爲'OFF'。如果該值沒有專門設置爲「OFF」,那麼我們可以在創建期間爲存儲過程將'Quoted_Identifier'值設置爲'ON'嗎? – zeee

+0

如果你不在每個'create procedure'語句的前面調用'set quoted_identifier on',那麼這個過程將繼承當前的連接設置。這些設置通常由不同的人「感染」(重新)創建過程,而不考慮這些粘性屬性。如果有人運行'alter procedure',它也會在當時選擇環境設置。 – Clay