很久没有定下心来学习了,正好要用到数据库发邮件,正文内容长度不能确定,需要用到nvarchar(max),一开始凭经验应该觉得就是8000或4000。但网上查了结果,并做了一些测试后,才知道不是那样。
以下为网上转的内容:
问题描述:存储过程中有一参数,类型为varchar(max),程序中对应的使用了SqlDbType.Text,可当参数内容很长时(接近2w字符长度),报错:将截断字符串或二进制数据。语句已终结。但我们知道varchar(max)可以有2G的容量,怎么长度就不够了呢?
测试:
验证语句如下:
declare @t varchar(max)
set @t=replicate('1',9000)
print len(@t)
继续
set @t=replicate(convert(varchar(max),'1'),9000)--强制转换为varchar(max)。
print len(@t) --输出了9000。没问题了。
总结:原来强制转换是关键。
关于sp_executesql的参数:
1、类型必须是:nvarchar;
2、并且有长度8000限制的(带中文就4000了)。