VS 資料庫專案發行到不同定序的 SQL Server
先說明一下我的 Visual Studio 資料庫專案開發流程,區分三階段:
1 資料庫設計與程序開發
我直接在開發資料庫上變更資料表結構與撰寫相關程序 (預存程序、觸發、方法...)
2 匯入原始碼
使用 Visual Studio 資料庫專案,從開發資料庫將所有資料庫結構、觸發、預存程序,方法...等,
透過 Schema Compare 比對匯入 Visual Studio 專案。
3 資料庫發行 Publish DataBase
資料庫發行在 Visual Studio 是將原始碼與發行資料庫作比對後,可以產生語法或直接更新資料。
遭遇難題
過往總是將資料庫的定序設定為 SQL_Latin1_General_CP1_CI_AS
資料表與欄位並不會再特別設定。
近日遇到新發行端 Server 定序不同,是屬於 Case Sensitive
導致預存程序中變數名稱大小寫必須都一致才行,
舉例下面這兩行
在 Server 層級定序區分大小寫,是無法執行。
在 SQL Server 各層級都有 定序 Collation 的設定,
自上而下分別為 Server -> DataBase -> Table -> Column
若沒有設定定序,會從上層繼承。
當資料庫層級的定序不區分大小寫,但 Server 是區分大小寫時,
預存程序的變數就會區分大小寫。
解決方法 1
直接修改開發端資料庫的 Server 層級的定序為 SQL_Latin1_General_CP1_CS_AS
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=Administrator /SQLCOLLATION=SQL_Latin1_General_CP1_CS_AS
解決方法 2
若不改變開發端資料庫的 Server 層級的定序,
可以在 Visual Studio 資料庫專案修改資料庫的定序,
當從開發端資料庫匯入時,即可發現大小寫撰寫的錯誤。
設定方式如下圖