VS 資料庫專案發行到不同定序的 SQL Server

先說明一下我的 Visual Studio 資料庫專案開發流程,區分三階段:

1 資料庫設計與程序開發

我直接在開發資料庫上變更資料表結構與撰寫相關程序 (預存程序、觸發、方法...)

2 匯入原始碼

使用 Visual Studio 資料庫專案,從開發資料庫將所有資料庫結構、觸發、預存程序,方法...等,

透過 Schema Compare 比對匯入 Visual Studio 專案。

3 資料庫發行 Publish DataBase

資料庫發行在 Visual Studio 是將原始碼與發行資料庫作比對後,可以產生語法或直接更新資料。

Image1


遭遇難題

過往總是將資料庫的定序設定為 SQL_Latin1_General_CP1_CI_AS

資料表與欄位並不會再特別設定。

近日遇到新發行端 Server 定序不同,是屬於 Case Sensitive

導致預存程序中變數名稱大小寫必須都一致才行,

舉例下面這兩行

在 Server 層級定序區分大小寫,是無法執行。

Image2

在 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 資料庫專案修改資料庫的定序,

當從開發端資料庫匯入時,即可發現大小寫撰寫的錯誤。

Image3

設定方式如下圖

Image4