2011-01-25 5 views
9

Porównaj te dwa oświadczeniaSql Server STUFF - czy ma działać z pozycją> 8000?

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

Wyjście

aaaaaaaaaaaaaaaaaaaaaaaa... 
NULL 

Books Online mówi start can be of type bigint. Dlaczego taki duży zakres, jeżeli nie będzie pracować nawet do 8001?

Jeśli zachowanie różni się między 2005, 2008, 2008 R2 i Denali, to chciałbym poznać rzeczywiste zachowanie każdej wersji.

Odpowiedz

18

REPLICATE ('a', 10000) będzie produkować ciąg znaków: 8000

Jeśli string_expression nie jest typ varchar (max) lub nvarchar (max), replikować obcina wartości zwracanej na 8000 bajtów. Aby zwrócić wartości większe niż 8 000 bajtów, wyrażenie string musi być jawnie rzutowane na odpowiedni typ danych o dużej wartości .

Wypróbuj REPLICATE (cast('a' as varchar(max)), 10000).

+0

+1 Niezły! ... –

Powiązane problemy