[SQL Server] 關於 Store Procedure 中使用 sp_executesql 執行 T-SQL 陳述式

  • 5064
  • 0

[SQL Server] 關於 Store Procedure 中使用 sp_executesql 執行 T-SQL 陳述式

在撰寫 Store Procudure 時, 因需求關係可能會在其中依據條件的不同來組成 T-SQL 陳述式, 再加以執行。

在一般的條件下, 只需要下 sp_executesql @陳述式變數即可完成執行動作。

但若 T-SQL 陳述式中, 有特殊文字如 "綉", 不論是寫在條件式中或是查詢欄位, 這種特殊文字是無法正常呈現的。

先看下 SQL Server 是如何呈現特殊文字的, 如下, 若直接查詢 " 綉" 這個字, 我們看到的結果會是 "?"。

Image(9)[4]

該如何讓它正常呈現, 只要加個前贅字 "N" 即可, SQL Server 會知道要以 Unicode 來作呈現。可參考 http://support.microsoft.com/kb/239530/zh-tw

Image(10)[4]

既然知道了如何以呈現 Unicode 來呈現特殊文字, 那麼若是要在 Store Procedure 中使用 T-SQL 陳述式來查詢特殊文字呢?以下幾點請注意:

1. Unicode 參數請使用 nvarchar 型別。

2. 若是使用 T-SQL 陳述式, 請使用 sp_executesql 來配合執行。

以下示範如何在 Stror Procedure 中使用 T-SQL 陳述式並相容 Unicode的作法。

先定義兩個主要參數, @sqlStr 為要存放 T-SQL 陳述式之變數, @pDefinition 為定義參數型別時使用。

Image [2]

定義陳述式及參數型別, 該參數可能會放置特殊文字, 故指定型別為 Nvarchar, 長度則依需求調整。

Image [3]

執行此 T-SQL 陳述式語法如下, @unicodeWord 是定義在 T-SQL 陳述式中的參數, @queryWord 為欲查詢參數(注意: 傳遞此參數時須注意要以 Unicode 傳遞)。

Image [4]

以上, 即可跟特殊文字的問題說再見啦!