SQL Server 2008 Nvarchar(Max)串联-截断问题 [英] SQL Server 2008 Nvarchar(Max) concatenation - Truncation issue
问题描述
有人可以解释一下为什么在SQL Server 2008上会发生这种情况吗?
Can someone please explain why this is happening on 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),就不应发生截断,但仍会发生截断.
Multiple sites suggest that as long as first variable is of type NVARCHAR(MAX), truncation should not occur, but it still does.
推荐答案
因为'a'
和'b'
的类型不是NVARCHAR(MAX)
像这样,它应该可以工作:
Like this, it should work:
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)
这是指向Microsoft的REPLICATE函数信息的链接: https://msdn.microsoft.com/en-us/library/ms174383.aspx
This is the link to Microsoft's REPLICATE function information: https://msdn.microsoft.com/en-us/library/ms174383.aspx
在里面说:
如果string_expression不是varchar(max)或nvarchar(max)类型,则REPLICATE将返回值截断为8,000个字节.要返回大于8,000个字节的值,必须将string_expression显式转换为适当的大值数据类型.
If string_expression is not of type varchar(max) or nvarchar(max), REPLICATE truncates the return value at 8,000 bytes. To return values greater than 8,000 bytes, string_expression must be explicitly cast to the appropriate large-value data type.
这篇关于SQL Server 2008 Nvarchar(Max)串联-截断问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!