我在许多代码行上构建了T-SQL变量@Foo
。
如果@Foo
被声明为VarChar(MAX)
,则紧随其后的PRINT
语句会输出我期望的内容(5,421个字符)。
但是,后续EXECUTE
语句失败,因为它需要NVarChar
参数。
当我将@Foo
的声明更改为NVarChar(MAX)
时,PRINT
语句仅打印出我期望的子集(3,902个字符)。输出被截断。
@Foo
是许多变量的串联,所有变量都是VarChar(MAX)
。在我上链之前,将所有前任变量更改为NVarChar(MAX)
,继续测试之前,我想知道是否有人对这种不一致的行为有所了解。
PRINT @Foo
EXECUTE [master].[sys].[sp_executesql] @Foo
非常感谢。
基思
答案 0 :(得分:0)
如MSDN PRINT所述,
如果是a,则消息字符串最长可达8,000个字符 非Unicode字符串,如果是Unicode,则长度为4,000个字符 串。更长的字符串被截断。 varchar(max)和 nvarchar(max)数据类型被截断为no的数据类型 大于 varchar(8000)和 nvarchar(4000)。
sp_executesql
不适用这些限制。