2011-01-25 15 views
9

bu iki ifadeSql Server STUFF -> 8000 pozisyonu ile çalışacak mı?

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

Çıktı böyle büyük aralığı bile 8001 için çalışmaz, neden

aaaaaaaaaaaaaaaaaaaaaaaa... 
NULL 

Kitaplar Çevrimiçi start can be of type bigint. diyor karşılaştırın?

davranış 2005 2008 2008 R2 ve Denali arasında farklı ise

, o zaman her bir sürümün gerçek davranışlarını bilmek istiyorum.

cevap

18

REPLICATE ('a', 10000) bir 8000 karakter dizesi üretecek: string_expression tip varchar (max) veya nvarchar (max) değilse

, REPLICATE 8.000 bayt dönüş değeri keser. 8.000 bayt daha büyük değerleri dönmek için string_expression uygun büyük değeri veri türüne açıkça döküm olmalıdır.

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

+0

+1 Güzel biri! ... –