Posts

Showing posts from June, 2014

[SQL Server] 如何轉換Collation?

Image
歷史久遠的老品牌公司嘛,就是歷史包袱很多經常要考慮相容性的問題。因為公司舊的Sql server不是使用預設的Collation,如果我在新資料庫硬要使用新的Collation,很多使用HKSCS big5碼的香港字符就會爛掉(例如啱,嘅)。最後為了趕工加上老闆的決定要轉回用舊的collation。改Collation這回事....很抱歉是沒有GUI可以使用(噗)。
先把SQL Server 2012安裝光碟mount到SQL Server. 例如我把整個image放在C:\sqlserver.
打開cmd, 把位置移到C:\sqlserver, 然後輸入 Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=administrator /SAPWD=<你sa的密碼> /SQLCOLLATION=Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS_SC
在這裡 /SQLSYSADMINACCOUNTS一定要輸入administrator, 輸入sa不知道為什麼無法確認admin帳號 囧, 確認無誤後按Enter.沒有問題的話大概跑個五分鐘, 從新看到C:\sql server就完成了 (M$一點提示都沒有真陽春)
接下來當然是把之前備份的設定慢慢重灌回去囉(哀)

[SQL Server] 如何辨別欄位中的數據是否包含繁體中文字?

背景:
今天好不幸運,因為資料出錯的關係需要找出在SQL Server內某一資料表中某個欄位含有中文的 record (s)。SQL Server當然....沒有預載這個功能啦。所以只好自己寫一隻T-SQL。囧

方法原理:
這次會用到的是patindex這個功能。patindex 的作用是傳回指定之運算式中的模式,在所有有效文字和字元資料類型中第一次出現的起始位置,如果找不到模式,便傳回零[1]。簡單點來說如果沒有發現中文字傳回零,否則傳回非零數字。這樣就可以判斷欄位是否有中文字了。

例子:
SELECT *
from <你想要尋找的資料表>
where patindex('%[一-龜]%',<你想要判斷的欄位>) > 0

為什麼一定 "一" 到 "龜"呢?因為ASCII中繁體中文字的範圍剛好是40869,那就是說如果找到ASCII碼在此範圍的字一定是中文囉。


希望對於大家有點小幫助,如果以上論點有問題歡迎提出給小弟一次機會更正喔 :-)。

參考:
http://msdn.microsoft.com/zh-tw/library/ms188395.aspx