データ型varchar(MAX)の変数を宣言した手順があります。
declare @str varchar(MAX);
set @str='select * from Table1...'
print (@str);
exec (@str);
しかし、@ str内に書き込まれたテキストが8000文字(つまり8193文字)を超えると、文字列が切り捨てられて8000文字のみが出力され、実行するとエラーが発生します。
いくつかの検索後に2つの解決策を試しましたが、うまくいきません。
1)「varchar(MAX)」という同じ型の2つの変数を使用してみましたが、実行時にそれを連結しましたが、機能しません。
2)連結する前に両方の変数を「varchar(MAX)に再度キャスト」してから実行しようとしましたが、これも機能しません。
SSMSは、デフォルトでは8000文字を超えるvarcharを表示できません。
ただし、最大2GBのvarchar(max)値をstoreできます。
8,000文字のチャンクサイズを使用して、ループを設定し、@str
データの「チャンク」を表示できます。
この回答 は、メモリ内の@str
値の実際の長さを確認する方法を示します。
そして このMSDN記事 は実行について説明しています。特に:
SQL Serverの以前のバージョンでは、文字列は8,000バイトに制限されていました。これには、動的実行のために大きな文字列を連結する必要があります。 SQL Server 2005では、varchar(max)およびnvarchar(max)データ型を指定して、文字列を最大2ギガバイトのデータにすることができます。
これは、受け取ったエラーが何か別のものであり、@str
値の切り捨て操作の結果ではないことを意味します。