Sql server 处理很长的varchar/nvarchar变量?

Sql server 处理很长的varchar/nvarchar变量?,sql-server,tsql,Sql Server,Tsql,我们有一个以html格式创建电子邮件正文的脚本,这样就可以使用sp\u send\u dbmail发送电子邮件 所以我有三个变量:@tableHTML1-varchar(8000),@tableHTML2-varchar(8000),@tableHtmlComplete-varchar(max) 执行tsql脚本后,@tableHTML1的len为4768,@tableHTML2为4594。由于sp\u send\u dbmail的@body参数只能接收一个变量,因此我最终执行了set@tabl

我们有一个以html格式创建电子邮件正文的脚本,这样就可以使用
sp\u send\u dbmail
发送电子邮件

所以我有三个变量:
@tableHTML1-varchar(8000)
@tableHTML2-varchar(8000)
@tableHtmlComplete-varchar(max)

执行tsql脚本后,
@tableHTML1
的len为4768,
@tableHTML2
为4594。由于
sp\u send\u dbmail
@body
参数只能接收一个变量,因此我最终执行了
set@tableHtmlComplete=@tableHTML1+@tableHTML2
。不幸的是,
@tableHtmlComplete
的len是8000,因为这是varchar变量的最大大小

那么在这种情况下我能做什么呢?我需要通过电子邮件发送@tableHTML1 plus@tableHTML2的内容

我将只考虑另一个解决方案,如果我上面所做的是不可行的。


谢谢。

在连接它们之前,将它们转换为
varchar(max)

DECLARE @tableHTML1 varchar(8000), @tableHTML2 varchar(8000), @tableHtmlComplete varchar(max)

SET @tableHTML1 = REPLICATE('a',4768);
SET @tableHTML2 = REPLICATE('a',4594);
SET @tableHtmlComplete = CONVERT(VARCHAR(MAX),@tableHTML1) + CONVERT(VARCHAR(MAX),@tableHTML2);

SELECT DATALENGTH(@tableHtmlComplete);

结果:9362

在连接它们之前,将它们转换为
varchar(max)

DECLARE @tableHTML1 varchar(8000), @tableHTML2 varchar(8000), @tableHtmlComplete varchar(max)

SET @tableHTML1 = REPLICATE('a',4768);
SET @tableHTML2 = REPLICATE('a',4594);
SET @tableHtmlComplete = CONVERT(VARCHAR(MAX),@tableHTML1) + CONVERT(VARCHAR(MAX),@tableHTML2);

SELECT DATALENGTH(@tableHtmlComplete);

结果:9362作为旁注:您可以通过将第一个值转换为varchar(max)来简化Lamak的解决方案,如下所示:


作为旁注:您可以通过将第一个值转换为varchar(max)来简化Lamak的解决方案,如下所示:


8000字节不是最大大小。VARCHAR(最大值)可以保存2gb的数据。那么为什么它会以8000位剪切文本?字节而不是位。最后,我将所有变量声明为
varchar(max)
,电子邮件发送正确。我只是觉得将两个
varchar(max)
连接成一个
varchar(max)
会达到一定的极限。我显然错了。8000字节不是最大大小。VARCHAR(最大值)可以保存2gb的数据。那么为什么它会以8000位剪切文本?字节而不是位。最后,我将所有变量声明为
varchar(max)
,电子邮件发送正确。我只是觉得将两个
varchar(max)
连接成一个
varchar(max)
会达到一定的极限。我显然错了。