PRINT Convert(VarChar(Max),Replicate('1234567890 ',1000))


返回到窗口7,997个字符。

SELECT Convert(VarChar(Max),Replicate('1234567890 ',1000))


这将返回到网格7,996个字符。打印窗口中的多余字符是CRLF。我有这样的选择:
工具→选项→查询结果→结果文本→每列中显示的最大字符数= 8192

因此,我希望在网格中返回8,192个字符,并希望向窗口中返回11,001个字符。

然后有这个测试:

DECLARE @VarCharMax VarChar(Max)
SET @VarCharMax = Replicate('123456',2000)
SELECT Right(@VarCharMax,3) -- returns 456
SELECT Right(Left(@VarCharMax,8000),3) -- returns 456
SELECT Right(Left(@VarCharMax,7999),3) -- returns 456
SELECT Right(Left(@VarCharMax,7998),3) -- returns 456
SELECT Right(Left(@VarCharMax,7997),3) -- returns 345
SELECT Right(Left(@VarCharMax,7996),3) -- returns 234


我在这里缺少了解什么?它似乎根本不符合我的预期?

最佳答案

除非参数的类型为varchar(max)/ nvarchar(max),否则复制函数的限制为8000个字符

https://msdn.microsoft.com/en-us/library/ms174383.aspx


如果string_expression的类型不是varchar(max)或nvarchar(max),则REPLICATE会截断8,000个字节的返回值。要返回大于8,000个字节的值,必须将string_expression显式转换为适当的大值数据类型。

09-12 16:16