2012-08-23 24 views
13

Bunu yapmaya çalışıyorum:Bir dize var varchar (max) 'dan daha büyük nasıl saklanır?

DECLARE @myVar VARCHAR(MAX) 
Loop with cursor 
select @myVar = @myVar + bla bla bla 
end loop 

döngü biter, @myVar sadece 8000 karakter içeren, eksik.

Metin kullanmayı denedim ancak yerel sürümlere izin verilmiyor.

Bu dava için iyi bir çözüm ne olurdu?

xml var?

Sadece bu mesajları baktım:

How do I pass a string parameter greater than varchar(8000) in SQL Server 2000?

Check if concatenating to a varchar(max) will go beyond max allowable characters

Ve diğerleri web üzerinden.

Saygılarımızla.

+3

Varchar (max) 'dan daha büyüktür? Bu 2 GB'lık veri - 2 milyar karakter - bu, ** T3.13'ün * Savaş ve Barış * romanının tamamı olan ** 200 kattan fazla ** ve bu sizin için yeterince büyük değil! * –

+1

@marc_s: Soru, poster değişkeninin neden döngü sonunda yalnızca 8000 karakter içerdiğini soruyor gibi görünüyor; Başlığın yanıltıcı olduğunu düşünüyorum. Belki de poster burada tam olarak neyin sorulmakta olduğunu açıklığa kavuşturmak için düzenleyebilir. –

+0

@KenWhite: bu sorunun nasıl çözüleceğine ilişkin yanıtımı inceleyin. –

cevap

26

Ciddi - veri VARCHAR(MAX) 2 saklayabilirsiniz GB - sadece 8000 karakterden .....

bu deneyin:

DECLARE @myVar VARCHAR(MAX) = '' 

DECLARE @ix INT = 1 

WHILE @ix < 1000 
BEGIN 
    set @myVar = @myVar + CAST('bla bla bla' AS VARCHAR(MAX)) 
    SET @ix = @ix + 1 
END 

SELECT DATALENGTH(@myvar) 

Bu yüksek 8000'den karakterleri bir değer dönecektir 1000 tekrardan sonra.

nokta şudur: varchar(max) kullanıyorsanız, emin daima açıkça varchar(max) için tüm dizeleri döküm yapmak gerekir - bu örnekte olduğu gibi. Aksi halde, SQL Server "düzenli" varchar işlemeye geri dönecek ve bu gerçekten 8000 karakterle sınırlandırılacak ....

+1

Bu, açık döküm olmadan benim için iyi çalışıyor. Dikkat etmeniz gereken yerde REPLICATE gibi yerleşik olanları kullanmaktır. –

+0

Tamam, bunu deneyeceğim. – Eduardo

+1

@AaronBertrand: ahhh .... enteresan - evet - işe yaramaz gibi görünüyor - döküm olmadan bile .... hmm .... –