「定序」,就是決定資料在資料庫裡排列的方式。當兩個 table 定序不同的時候如果有做 join 的動作,那會發生「無法解析 equal to 作業中 xxx 與 ooo 之間的定序衝突」,因為 SQL Server 無法得知妳到底要遵從哪種定序。
例如,「Chinese_Taiwan_Stroke_CI_AS」,「CI」是指 Case Insensitive(不區分大小寫),「AS」是指 Accent sensitivity(區分腔調),其他比較常見的還有「CS」Case sensitivity(區分大小寫)、「AI」Accent Insensitive(不區分腔調),「WS」Width sensitivity(區分全形半形)等等。
程式開發時,可以用下列方式解決
select A, B, C from TableA
join TableB on TableA.A=TableB.A collate Chinese_Taiwan_Stroke_CI_AS
where A='XXX'
想要更改整個資料庫的定序做法如下
ALTER DATABASE 資料庫名稱 SET SINGLE_USER WITH ROLLBACK IMMEDIATE //鎖定目前資料庫
ALTER DATABASE 資料庫名稱 Collate Chinese_Taiwan_Stroke_CI_AS //設定定序名稱
ALTER DATABASE 資料庫名稱 SET MULTI_USER WITH ROLLBACK IMMEDIATE //恢復成多人使用
這個指令,不僅會直接更改資料庫的定序,連同這個資料庫下面的所有 tables 也都會被更改成這個新的定序,不過 Table 下的欄位也有自己的定序,通常預設是跟 Table 一樣,不過有時候也有例外的情形。
例如,「Chinese_Taiwan_Stroke_CI_AS」,「CI」是指 Case Insensitive(不區分大小寫),「AS」是指 Accent sensitivity(區分腔調),其他比較常見的還有「CS」Case sensitivity(區分大小寫)、「AI」Accent Insensitive(不區分腔調),「WS」Width sensitivity(區分全形半形)等等。
程式開發時,可以用下列方式解決
select A, B, C from TableA
join TableB on TableA.A=TableB.A collate Chinese_Taiwan_Stroke_CI_AS
where A='XXX'
想要更改整個資料庫的定序做法如下
ALTER DATABASE 資料庫名稱 SET SINGLE_USER WITH ROLLBACK IMMEDIATE //鎖定目前資料庫
ALTER DATABASE 資料庫名稱 Collate Chinese_Taiwan_Stroke_CI_AS //設定定序名稱
ALTER DATABASE 資料庫名稱 SET MULTI_USER WITH ROLLBACK IMMEDIATE //恢復成多人使用
這個指令,不僅會直接更改資料庫的定序,連同這個資料庫下面的所有 tables 也都會被更改成這個新的定序,不過 Table 下的欄位也有自己的定序,通常預設是跟 Table 一樣,不過有時候也有例外的情形。
沒有留言:
張貼留言