2013-02-12 72 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