使用带有EXECUTE [master]的VarChar或NVarChar参数的结果不一致。[sys]。[sp_executesql]

时间:2016-06-16 16:04:16

标签: sql sql-server tsql

我在许多代码行上构建了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

非常感谢。

基思

1 个答案:

答案 0 :(得分:0)

MSDN PRINT所述,

  

如果是a,则消息字符串最长可达8,000个字符   非Unicode字符串,如果是Unicode,则长度为4,000个字符   串。更长的字符串被截断。 varchar(max)和    nvarchar(max)数据类型被截断为no的数据类型   大于 varchar(8000) nvarchar(4000)

sp_executesql不适用这些限制。