星期五, 2月 22, 2013

[SQL] 判斷字串中是否有中文字存在

利用字串函數 LEN()、DATALENGTH() 和一個中文字是兩個位元組的特性,來判斷字串中是否有中文字。
  • LEN():回傳字串字元數,但尾端空白不算。
  • DATALENGTH():回傳字串位元組數目。
另一個重點則是欄位資料型態是 char、varchar 或 nchar 、nvarchar,會影響 DATALENGTH() 的回傳值。
DECLARE @Temp TABLE(Data char(10), Data1 char(10) , Data2 varchar(10) , Data3 nchar(10) , Data4 nvarchar(10))

INSERT INTO @Temp
  SELECT '123','123','123','123','123'
  UNION ALL
  SELECT 'ABC','ABC','ABC','ABC','ABC'
  UNION ALL
  SELECT '1A1','1A1','1A1','1A1','1A1'
  UNION ALL
  SELECT '123測試ABC','123測試ABC','123測試ABC','123測試ABC','123測試ABC' -- 中文字
  UNION ALL
  SELECT '789 ','789 ','789 ','789 ','789 ' -- 尾端故意留一個空格

SELECT Data , 
  LEN(Data1) AS [charL], DATALENGTH(Data1) AS [charDL],
  LEN(Data2) AS [varcharL], DATALENGTH(Data2) AS [varcharDL],
  LEN(Data3) AS [ncharL], DATALENGTH(Data3) AS [ncharDL],
  LEN(Data4) AS [nvarcharL], DATALENGTH(Data4) AS [nvarcharDL]
FROM @Temp
[SQL] 判斷字串中是否有中文字 - 1
  • 以 nvarchar 為例子來判斷字串中是否有中文字
SELECT Data4
FROM @Temp
WHERE LEN(CAST(Data4 AS varchar(8000)))
    = DATALENGTH(CAST(RTRIM(Data4) AS VARCHAR(8000)))
[SQL] 判斷字串中是否有中文字 - 2

此作法盲點在於,不是只有中文有此特性,日文和韓文也是,字串中假如同時混雜中文、日文和韓文時,這個作法就無法篩選結果。

星期五, 2月 15, 2013

[VFP] 自訂標籤

公司內有各式各樣的標籤需要列印,每一種標籤紙張大小,都設定一台標籤機,而該標籤機預設紙張即為要列印的標籤大小,不會出現一台標籤機內有多個標籤紙大小可以選擇。
  • 標籤機為 Godex EXPi-1300,從下圖可以看出 Godex1300-40x10 標籤機預設的紙張大小為 80mm X 10mm 標籤紙(其實是兩張 40mm X 10mm )。
[VFP] 自訂標籤-1
  • 列印時在 VFP 中預覽的正常畫面。
[VFP] 自訂標籤-2

星期五, 2月 08, 2013

[SQL] 標準報表 - 磁碟使用量

此報表可以觀察資料檔案、交易記錄檔案磁碟空間使用情形和資料庫自動成長/自動壓縮的事件。

[SQL] 標準報表 - 磁碟使用量-2

[SQL] 標準報表 - 磁碟使用量-1
標示 1:資料檔空間使用量和交易記錄空間使用量,是指 mdf 和 ldf 檔案佔的硬碟空間。
標示 2:資料 / 記錄檔自動成長 / 自動壓縮事件。
標示 3:使用空間,資料(Data)在[標示1 資料檔空間使用量(mdf)]的使用量。
  • 資料 / 記錄檔自動成長 / 自動壓縮事件
    1. 自動成長頻率過於頻繁,可以考慮增加自動成長的大小,最後是能一次規劃 3 - 5 年的資料量,避免自動成長。
    2. 自動成長預設是開啟,建議不要關閉它,避免資料爆增等突發狀況,而造成 SQL Server 無法正常運作。
    3. 自動壓縮觸發條件是當未使用空間佔整體使用空間的百分之二十五時,SQL Server 就會自動啟用壓縮功能。
    4. 自動壓縮預設關閉,建議不要開啟,避免自動成長後,又因為自動壓縮觸發,SQL Server 一直反覆執行兩動作。
    5. 自動成長或自動壓縮都會讓硬碟空間不連續,造成 Disk Logical Read 低落,也可能會造成 Blocking 或逾時等問題,要避免發生。

星期五, 2月 01, 2013

[Win] Terminal Services 1111 錯誤事件

在事件檢視器中發現從在很多 Terminal Services Printer 找不到 Driver 的錯誤訊息。

[Win] Terminal Services 1111 錯誤事件-1

後來一查才發現此錯誤訊息,原來都是自己利用遠端桌面登錄 Server 產生。
  • 遠端桌面連線的[本機資源] Tag => 本機裝置和資源 => 取消印表機選項,就可以避免這個錯誤訊息產生。
[Win] Terminal Services 1111 錯誤事件-2