Sql server 处理很长的varchar/nvarchar变量?
我们有一个以html格式创建电子邮件正文的脚本,这样就可以使用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
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)
会达到一定的极限。我显然错了。