更改 SQL Server 定序

在Azure上開了一個 SQL Server 2019 Developer Edition VM,跟在自己本機安裝最大的不同,就是不能選資料庫定序,這一點對大部分的資料庫沒有甚麼影響,我們可以針對單一資料庫或資料表改變定序,但如果遇到資料庫跟SQL Server定序不一樣的時候,你會發現有用到暫存資料表的預存程式會出現Exception。

System.Data.SqlClient.SqlException: ‘Cannot resolve the collation conflict between ” Chinese_Taiwan_Stroke_CI_AS ” and “SQL_Latin1_General_CP1_CI_AS” in the equal to operation.’

SQL Server 預設定序是SQL_Latin1_General_CP1_CI_AS,但在台灣習慣是用Chinese_Taiwan_Stroke_CI_AS,所以這次我就試著來改資料庫的定序,也把成果分享給同樣困擾的網友們。

最重要的一點就是資料庫要先備份,很重要所以要講三次,因為資料真的會不見。

首先,我們使用cmd (run as administrator) 進入 SQL Server 的資料夾,像我就是 C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\SQL2019> 然後執行這一行指令

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=資料庫實體 /SQLSYSADMINACCOUNTS=帳號 /SAPWD=密碼 /SQLCOLLATION=Chinese_Taiwan_Stroke_CI_AS

資料庫實體的名稱,我在過程中搞錯好幾次,不是Localhost..等等 SSMS 連線的名稱喔,你可以在 C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log 的Summary.txt 查得到。

以上,我把資料庫的定序改過來了,而且包含建立暫存資料表的預存程式也執行正確。

參考文章

五餅二魚工作室
[SQL][問題處理]如何改變已存在資料庫的定序 ?
https://dotblogs.com.tw/jamesfu/2016/12/10/Change_Database_Collate

設定或變更伺服器定序
https://docs.microsoft.com/zh-tw/sql/relational-databases/collations/set-or-change-the-server-collation?view=sql-server-ver15