有人可以解释一下为什么在 SQL Server 2008 上会发生这种情况吗:
declare @sql Nvarchar(max);
set @sql =N'';
select @sql = @sql +replicate('a',4000) + replicate('b', 6000);
select len(@sql)
回报:8000
多个站点建议只要第一个变量是 NVARCHAR(MAX) 类型,就不应该发生截断,但它仍然发生。
Because 'a'
and 'b'
不属于类型NVARCHAR(MAX)
像这样,它应该可以工作:
declare @sql Nvarchar(max),
@a nvarchar(max),
@b nvarchar(max);
select @sql =N'', @a = N'a', @b = N'b';
select @sql = @sql +replicate(@a,4000) + replicate(@b, 6000);
select len(@sql)
这是微软的REPLICATE函数信息的链接:https://msdn.microsoft.com/en-us/library/ms174383.aspx https://msdn.microsoft.com/en-us/library/ms174383.aspx
里面写着:
如果 string_expression 不是 varchar(max) 或 nvarchar(max) 类型,则 REPLICATE 会将返回值截断为 8,000 字节。要返回大于 8,000 字节的值,必须将 string_expression 显式转换为适当的大值数据类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)