Sql Server STUFF - это должно работать с позицией> 8000? - PullRequest
9 голосов
/ 25 января 2011

Сравните эти два утверждения

select stuff(convert(varchar(max),replicate('a', 10000)),8001,1,'b')
select stuff(convert(varchar(max),replicate('a', 10000)),8000,1,'b')

выход

aaaaaaaaaaaaaaaaaaaaaaaa...
NULL

Books Online говорит: start can be of type bigint. Зачем такой большой диапазон, если он даже не работает на 8001?

Если поведение отличается между 2005, 2008, 2008 R2 и Denali, то я хотел бы знать реальное поведение каждой версии.

1 Ответ

18 голосов
/ 25 января 2011

REPLICATE ('a', 10000) создаст строку из 8000 символов:

Если выражение string_expression не относится к типу varchar (max) или nvarchar (max), REPLICATE усекает возвращаемое значение в8000 байтов.Чтобы вернуть значения, превышающие 8000 байт, выражение string_expression должно быть явно приведено к соответствующему типу данных большого значения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...