Sql Server STUFF - 是否应该使用位置> 8000?

Ric*_*iwi 9 t-sql sql-server

比较这两个陈述

select stuff(convert(varchar(max),replicate('a', 10000)),8001,1,'b')
select stuff(convert(varchar(max),replicate('a', 10000)),8000,1,'b')
Run Code Online (Sandbox Code Playgroud)

产量

aaaaaaaaaaaaaaaaaaaaaaaa...
NULL
Run Code Online (Sandbox Code Playgroud)

在线书籍说start can be of type bigint. 为什么这么大的范围如果它甚至不能用于8001?

如果2005,2008,2008 R2和Denali之间的行为不同,那么我想知道每个版本的实际行为.

Rem*_*anu 18

REPLICATE ('a', 10000) 将产生8000个字符的字符串:

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

试试REPLICATE (cast('a' as varchar(max)), 10000).