ホームページ >データベース >mysql チュートリアル >データベース プログラミングで大きな VARCHAR(MAX) 値を効率的に出力する方法
PRINT ステートメントを使用して VARCHAR(MAX) を出力します
データベース プログラミングでは、従来のデータ型の制限を超える大量のデータを処理する必要があることがよくあります。 VARCHAR(MAX) はそのようなデータ型の 1 つで、最大 2^31-1 文字の文字列を格納できます。ただし、PRINT ステートメントの制限 (最大 8000 文字しか保持できない) により、大きな VARCHAR(MAX) 値を出力するのは困難になる可能性があります。
一般的な回避策は、複数の PRINT ステートメントを使用することです。たとえば、次のコードは VARCHAR(MAX) 値を 2 つの 8000 文字セグメントに分割し、それらを別々に出力します。
<code class="language-sql">DECLARE @Script VARCHAR(MAX) SELECT @Script = definition FROM manged.sys.all_sql_modules sq where sq.object_id = (SELECT object_id from managed.sys.objects Where type = 'P' and Name = 'usp_gen_data') Declare @Pos int SELECT @pos=CHARINDEX(CHAR(13)+CHAR(10),@script,7500) PRINT SUBSTRING(@Script,1,@Pos) PRINT SUBSTRING(@script,@pos,8000)</code>ただし、VARCHAR(MAX) 値が非常に大きく、複数の PRINT ステートメントが必要な場合、このアプローチは面倒で非効率的になります。
より高度なソリューションには、CAST データ型と NTEXT データ型の使用が含まれます。 NTEXT は最大 2^31-1 文字を保持できるため、大量のテキストを格納するのに適しています。 CAST 関数を使用すると、VARCHAR(MAX) 値を NTEXT に変換し、単一のステートメントで出力できるようになります。
このアプローチにより、長さに関係なく、単一のステートメントを使用して大きな VARCHAR(MAX) 値を出力できます。また、複数の PRINT ステートメントを使用するよりも効率的です。
<code class="language-sql">DECLARE @info NVARCHAR(MAX) --SET @info to something big PRINT CAST(@info AS NTEXT)</code>
NTEXT の 16,000 文字制限を超える大きなデータ サイズの場合は、この方法とサブクエリを組み合わせて、データをより小さな部分に分割できます。例:
このメソッドを使用すると、大きな VARCHAR(MAX) 値を最大 64,000 文字のチャンクに分けて出力できます。
<code class="language-sql"> print cast( substring(@info, 1, 16000) as ntext ) print cast( substring(@info, 16001, 32000) as ntext ) print cast( substring(@info, 32001, 48000) as ntext ) print cast( substring(@info, 48001, 64000) as ntext )</code>
以上がデータベース プログラミングで大きな VARCHAR(MAX) 値を効率的に出力する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。