22

私はこれをやろうとしています:

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

ループが終了すると、@myVar は不完全で、8000 文字しかありません。

テキストを使用しようとしましたが、ローカル変数には許可されていません。

この場合の適切な解決策は何でしょうか?

xml変数?

私はちょうどこの投稿を見ました:

SQL Server 2000 で varchar(8000) より大きい文字列パラメータを渡すにはどうすればよいですか?

varchar(max) への連結が最大許容文字数を超えるかどうかを確認します

そして、ウェブを通じて他の人。

よろしく。

4

1 に答える 1

38

Seriously - VARCHAR(MAX) can store up to 2 GB of data - not just 8000 characters.....

Try this:

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)

This will return a value higher than 8000 characters after 1000 iterations.

The point is: if you're using varchar(max), you need to make sure to always cast all your strings to varchar(max) explicitly - as I did in this example. Otherwise, SQL Server will fall back to "regular" varchar processing, and that's indeed limited to 8000 characters....

于 2012-08-23T18:18:53.090 に答える