2013-02-12 71 views
0

我有一個很長的內聯查詢,即使當我將nvarchar屬性設置爲MAX時,文本會被截斷。有什麼辦法讓sp_executesql改爲使用varchar。使sp_executesql採用varchar而不是nvarchar?

當我嘗試將nvarchar更改爲varchar時,出現錯誤,我嘗試了ntext,但結果相同。

編輯:

基於什麼我讀了張貼在回答這個問題,這應該工作,但它這麼想的任何人可以告訴我爲什麼?

Declare @X varchar(MAX) 
    SET @X = N'Select * From Users' 
    Execute sp_executesql @X 

雖然這工作沒有任何問題:

Execute sp_executesql N'Select * From Users' 
+0

跟這個一樣的用戶? http://stackoverflow.com/q/14828534/27535 – gbn 2013-02-12 08:49:27

+0

'@ X'必須是'nvarchar(max)'。就像這個'聲明@X nvarchar(MAX)'。 – 2013-02-12 10:17:31

+0

這個想法是在語句應該使它工作之前放置'N',那就是我理解事件是否是varchar。 – ykh 2013-02-12 10:28:15

回答

1

sp_executesql需要爲nvarchar的@stmt和@params參數

參數不必是nvarchar的。

Call sp_executesql with varchar parameter

如果您爲nvarchar(max)是被截斷,你是串聯錯了。
For Nvarchar(Max) I am only getting 4000 characters in TSQL?爲什麼

sp_executesql的的一點是要避免串建築反正:它可以讓你對parametrise執行計劃重新使用固定的查詢。爲什麼要連接來構建一個字符串?

+0

它是一個動態查詢,它將不同的字符串連接在一起,如where和order by ...等。 – ykh 2013-02-12 09:03:18