web-dev-qa-db-ja.com

varchar(max)より大きい文字列varを格納する方法は?

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

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

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

テキストを使用しようとしましたが、ローカル変数を使用できません。

この場合の良い解決策は何でしょうか?

xml var?

私はこの投稿を見たところです:

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

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

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

よろしく。

16
Eduardo

真剣に-VARCHAR(MAX)は、8000文字だけでなく、最大2 GBのデータを保存できます。

これを試して:

_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)
_

これは、1000回の反復後に値higher 8000文字よりも多くを返します。

重要な点は、varchar(max)を使用している場合は、常にcastすべての文字列を明示的にvarchar(max)に明示的に指定する必要があります。例。そうしないと、SQL Serverは「通常の」varchar処理にフォールバックし、実際には8000文字に制限されます。

31
marc_s