2012-08-23 24 views
13

Tôi đang cố gắng để làm điều này:Làm thế nào để lưu trữ một chuỗi var lớn hơn varchar (max)?

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

Khi vòng lặp kết thúc, @myVar là chưa đầy đủ, chỉ chứa 8000 ký tự.

Tôi đã cố gắng sử dụng văn bản nhưng không được phép sử dụng các vars cục bộ.

Giải pháp tốt cho trường hợp này là gì?

xml var?

Tôi vừa nhìn bài viết này:

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

Và những người khác thông qua web.

Trân trọng.

+3

Lớn hơn 'varchar (max)' ?? Đó là 2 GB dữ liệu - 2 tỷ ký tự - đó là hơn ** 200 lần ** kích thước của toàn bộ cuốn tiểu thuyết * Chiến tranh và Hòa bình * của Leo Tolstoj .... và đó là ** không đủ lớn cho bạn?!? * * –

+1

@marc_s: Câu hỏi dường như hỏi tại sao biến của người đăng chỉ chứa 8000 ký tự ở cuối vòng lặp; Tôi nghĩ rằng tiêu đề là gây hiểu nhầm. Có lẽ áp phích có thể chỉnh sửa để làm rõ chính xác những gì đang được hỏi ở đây. –

+0

@KenWhite: xem phản hồi của tôi về cách khắc phục sự cố này. –

Trả lời

26

Nghiêm túc - VARCHAR(MAX) có thể lưu trữ lên đến 2 GB dữ liệu - không chỉ là 8000 ký tự .....

Hãy thử điều này:

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) 

này sẽ trả về một giá trị cao hơn hơn 8000 ký tự sau 1000 lần lặp lại.

Vấn đề là: nếu bạn đang sử dụng varchar(max), bạn cần đảm bảo luôn luôn đúc tất cả các chuỗi của mình thành varchar(max) một cách rõ ràng - như tôi đã làm trong ví dụ này. Nếu không, SQL Server sẽ quay trở lại chế độ "thông thường" varchar và điều đó thực sự bị giới hạn ở 8000 ký tự ....

+1

Điều này làm việc tốt cho tôi mà không có diễn viên rõ ràng. Nơi bạn phải cẩn thận là khi sử dụng các trình cài sẵn như REPLICATE. –

+0

Ok, tôi sẽ thử điều này. – Eduardo

+1

@AaronBertrand: ahhh .... thú vị - vâng - có vẻ như chỉ hoạt động tốt - ngay cả khi không có diễn viên .... hmm .... –

Các vấn đề liên quan