PRINT Convert(VarChar(Max),Replicate('1234567890 ',1000))这将返回到窗口7997个字符。
SELECT Convert(VarChar(Max),Replicate('1234567890 ',1000))这将返回到网格7996个字符。打印窗口中的额外字符是CRLF。我有如下选项:工具→选项→查询结果→Results to Text→每列中显示的最大字符数= 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在这里,我错过了什么理解?它的行为似乎完全不像我所期望的那样?
发布于 2016-11-15 23:02:22
8000个字符是replicate函数的限制,除非参数类型为varchar(max)/nvarchar(max)
https://msdn.microsoft.com/en-us/library/ms174383.aspx
If string_expression is不是varchar(Max)或nvarchar(Max)类型,则REPLICATE将在8,000字节处截断返回值。若要返回大于8,000字节的值,请将 string_expression must显式转换为适当的大值数据类型。
发布于 2016-11-15 23:03:01
SELECT len(Replicate(cast('1234567890' as varchar(max)),1000))
Returns 10000发布于 2016-11-15 23:10:27
replicate函数中的'123456‘文本不是varchar(max)数据类型。正如Dudu提到的,如果表达式不是varchar(max)数据类型,复制函数限制为8000个字符。
https://stackoverflow.com/questions/40613062
复制相似问题