SQL Server 2008 Nvarchar(Max)串联-截断问题 [英] SQL Server 2008 Nvarchar(Max) concatenation - Truncation issue

查看:445
本文介绍了SQL Server 2008 Nvarchar(Max)串联-截断问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以解释一下为什么在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆