使sp_executesql采用varchar而不是nvarchar?
问题描述:
我有一个很长的内联查询,即使当我将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'
答
号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
跟这个一样的用户? http://stackoverflow.com/q/14828534/27535 – gbn 2013-02-12 08:49:27
'@ X'必须是'nvarchar(max)'。就像这个'声明@X nvarchar(MAX)'。 – 2013-02-12 10:17:31
这个想法是在语句应该使它工作之前放置'N',那就是我理解事件是否是varchar。 – ykh 2013-02-12 10:28:15