Sql Server STUFF – он должен работать с позицией> 8000?

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

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, тогда я хотел бы узнать фактическое поведение каждой версии.

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

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

Попробуйте REPLICATE (cast('a' as varchar(max)), 10000) .

Interesting Posts

Как бы вы моделировали следующее в базе данных

False Negative: История шагов задания

Плохая производительность SQL-запроса из-за предложения ORDER BY

Проверьте, является ли строка зарезервированными ключевыми словами SQL Server или нет.

Суммируйте по неделям, даже для пустых строк

SQL – Как найти значение в структуре данных на уровне дерева

Учитывая диапазон подсети и список IP-адресов, выберите все строки, которые IP-адреса попадают между

Linq 2 Sql Сравнение локальной последовательности с запросом с использованием «Like» – наиболее эффективный метод

Диспетчер конфигурации SQL Server

Tsql AND (&) запутывает

Есть ли способ изменить этот запрос и удалить подзапрос в select

Как получить следующую дату в повторяющихся идентификационных последовательностях в SQL Server 2008

JTDS и транзакции

sql server – как выполнить вторую половину предложения «или» только тогда, когда первый

SQL присоединяется к запросу между двумя разными файлами базы данных

Давайте будем гением компьютера.