2016-05-26 48 views
1

ストアドプロシージャで動的クエリを作成しています。動的クエリを印刷しようとすると、クエリ全体の一部しか印刷されません。私は以下のように変数の長さを印刷するとき、全体の動的クエリを保持しているSQL ServerでNvarchar(max)が4000文字に縮小されます

私の変数は、それは良いですが、全体のクエリの長​​さを与える、以下

DECLARE @SQL NVARCHAR(MAX) 

のように宣言されています。

PRINT LEN(@SQL) 

しかし、スクリプト自体を印刷すると、クエリ全体の一部しか印刷されません。

PRINT @SQL 

私はまた、それだけで最初4000charsを出力なぜ

PRINT CONVERT(NVARCHAR(MAX),@SQL) 

以下のようにそれを印刷しようとしましたか?私は間違って何をしていますか?

+2

なぜドキュメントを読んでいないのですか? https://msdn.microsoft.com/en-us/library/ms176047.aspxメッセージ文字列は、Unicode以外の文字列の場合は最大8,000文字、Unicode文字列の場合は4000文字まで指定できます。長い文字列は切り捨てられます。 varchar(max)およびnvarchar(max)データ型は、varchar(8000)およびnvarchar(4000)以下のデータ型に切り捨てられます。 –

+0

@VladimirBaranov、しかし私の文字列は約15.000文字です。 –

+2

あなたのデータは縮小/切り詰めされていません。 SSMSには、特定のフィールドに表示される文字数に制限があります。別のアプリケーションを使用して 'SELECT'クエリ結果を解釈すると、フィールドの完全な値が得られます。 – Siyual

答えて

6

あなたは間違ったことはしていません。印刷コマンドは、4000文字の出力に制限されています(詳細は、BOL - Books Onlineを参照してください)。 nvarchar(max)が4000文字に縮小されているわけではありません。

1

SET @Query = 'SELECT ....' [Up To 4,000 characters, then rest of statement as below] 

SET @Query = @Query + [rest of statement] 

Now run your query as normal i.e. EXEC (@Query) 

それは4000文字に制限されているPRINT、ないNVARCHAR(MAX)変数のリンク

nvarchar(max) still being truncated

2

以下から答えを得た、文字列全体を印刷するには、以下のようにしてみてください。

すべてを出力したい場合は、このPRINT BIG関数のような文字列を使用してください。

https://www.richardswinbank.net/doku.php?id=tsql:print_big

また、単に限定されるものではない変数を選択し、その結果からコンテンツをコピーすることもできます。

関連する問題