连接varchar(max)变量SQL Server 2005

Dak*_*e83 3 sql-server varchar sql-server-2005 varcharmax

在将几个@varchar(max)变量连接在一起以基于几个不同的查询构建电子邮件时,遇到了一个令人头疼的问题.

为了提高效率,我使用了几个varchars来一次构建电子邮件,而不是通过大致相同的查询两次或三次或更多次来构建它只使用一个varchar.

这一直有效,直到我的varchars长度超过8000个字符.然后将它们串联成一个varchar(我可以推入@body参数msdb.dbo.sp_send_dbmail)返回"",甚至LEN()实际上也不会给我一个长度.

无论如何,我通过几次大致相同的查询并仅使用一个查询构建电子邮件来解决这个问题varchar(max).

TL; DR

我对解决方案不满意.我怎么能把这些varchar(max)变量相互附加?

Phi*_*ley 5

我过去曾经遇到的一件事情可能会有所帮助,也可能没有帮助:SQL似乎"忘记"连接varchar(max)时使用的数据类型.它不是维持MAX,而是转向传统的varcharnitude,意味着截断大约8000个字符.为了解决这个问题,我们使用以下技巧:

从...开始

SET @MyMaxVarchar = @aVarcharMaxValue + @SomeString + @SomeOtherString + @etc
Run Code Online (Sandbox Code Playgroud)

和修改如下:

SET @MyMaxVarchar = cast(@aVarcharMaxValue as varchar(max)) + @SomeString + @SomeOtherString + @etc
Run Code Online (Sandbox Code Playgroud)

同样,这可能对您的特定问题没有帮助,但记住它可能会让您在某一天的道路上遇到麻烦.