[SQL Server] 關於 Store Procedure 中使用 sp_executesql 執行 T-SQL 陳述式
在撰寫 Store Procudure 時, 因需求關係可能會在其中依據條件的不同來組成 T-SQL 陳述式, 再加以執行。
在一般的條件下, 只需要下 sp_executesql @陳述式變數即可完成執行動作。
但若 T-SQL 陳述式中, 有特殊文字如 "綉", 不論是寫在條件式中或是查詢欄位, 這種特殊文字是無法正常呈現的。
先看下 SQL Server 是如何呈現特殊文字的, 如下, 若直接查詢 " 綉" 這個字, 我們看到的結果會是 "?"。
該如何讓它正常呈現, 只要加個前贅字 "N" 即可, SQL Server 會知道要以 Unicode 來作呈現。可參考 http://support.microsoft.com/kb/239530/zh-tw。
既然知道了如何以呈現 Unicode 來呈現特殊文字, 那麼若是要在 Store Procedure 中使用 T-SQL 陳述式來查詢特殊文字呢?以下幾點請注意:
1. Unicode 參數請使用 nvarchar 型別。
2. 若是使用 T-SQL 陳述式, 請使用 sp_executesql 來配合執行。
以下示範如何在 Stror Procedure 中使用 T-SQL 陳述式並相容 Unicode的作法。
先定義兩個主要參數, @sqlStr 為要存放 T-SQL 陳述式之變數, @pDefinition 為定義參數型別時使用。
定義陳述式及參數型別, 該參數可能會放置特殊文字, 故指定型別為 Nvarchar, 長度則依需求調整。
執行此 T-SQL 陳述式語法如下, @unicodeWord 是定義在 T-SQL 陳述式中的參數, @queryWord 為欲查詢參數(注意: 傳遞此參數時須注意要以 Unicode 傳遞)。
以上, 即可跟特殊文字的問題說再見啦!