SQL Server の PRINT ステートメントでの Long VARCHAR(MAX) データの処理
SQL Server の PRINT
ステートメントには制限があり、最大 8000 文字しか表示できません。 これは、かなり多くのデータを保存できる VARCHAR(MAX)
データを扱うときに問題を引き起こします。 この制限を超える PRINT
値を VARCHAR(MAX)
しようとすると、切り捨てられます。
CAST と SUBSTRING を使用した動的ソリューション
この解決策には、VARCHAR(MAX)
データを 8000 文字未満の小さなチャンクに動的に分割し、それらを個別に出力することが含まれます。 次のコードは、このアプローチを示しています。
<code class="language-sql">DECLARE @Script VARCHAR(MAX); SELECT @Script = definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('usp_gen_data'); -- Replace 'usp_gen_data' with your stored procedure name DECLARE @PartsCount INT; DECLARE @PartSize INT; DECLARE @PartStartIndex INT; DECLARE @i INT = 1; SET @PartsCount = ROUND((LEN(@Script) - 1) / 8000, 0) + 1; SET @PartSize = CEILING((LEN(@Script) - 1) / @PartsCount, 0); SET @PartStartIndex = 1; WHILE @i <= @PartsCount BEGIN PRINT CAST(SUBSTRING(@Script, @PartStartIndex, @PartSize) AS NTEXT); SET @PartStartIndex = @PartStartIndex + @PartSize; SET @i = @i + 1; END;</code>
このコードは、最初に VARCHAR(MAX)
データを取得します。 次に、必要なパーツの数 (@PartsCount
)、各パーツのサイズ (@PartSize
) を計算し、WHILE
ループを使用して、SUBSTRING
と CAST
から NTEXT
を使用して各パーツを繰り返し出力します。 Unicode 文字の最適な処理。 これにより、長さに関係なく、VARCHAR(MAX)
値全体が表示されます。 'usp_gen_data'
をストアド プロシージャの実際の名前または長い文字列のソースに忘れずに置き換えてください。
以上がPRINT ステートメントの制限を超えた場合、SQL Server で VARCHAR(MAX) 値を出力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。