SQL Server 2005では、8192を超えるテキストデータを持つ行を持つvarchar(MAX)列を照会しようとしています。しかし、Management Studioでは、ツール->オプション->クエリ結果- ->テキストへの結果->各列に表示される最大文字数= 8192、これは最大です。したがって、これらの行の切り捨ては、テキスト出力によって課される制限のためにのみ発生するようです。
これを回避する唯一の方法は、SUBSTRING関数を使用して、最初の8000文字、次に8000文字などを取得することです。しかし、これは見苦しく、エラーが発生しやすくなります。
SSISとBCPは私にとって選択肢ではないことに言及する必要があります。
誰にも良い提案がありますか?ありがとう!
データは、切り捨てられないフラットファイルにエクスポートできます。これをする:
残りの手順は自明である必要があります。これにより、ファイルがテキストに出力され、お気に入りのテキストエディターで開くことができます。
私もXMLを使用していますが、 わずかに異なる方法 は、XMLエンティシエーションに関するほとんどの問題を回避します。
declare @VeryLongText nvarchar(max) = '';
SELECT top 100 @VeryLongText = @VeryLongText + '
' + OBJECT_DEFINITION(object_id)
FROM sys.all_objects
WHERE type='P' and is_ms_shipped=1
SELECT LEN(@VeryLongText)
SELECT @VeryLongText AS [processing-instruction(x)] FOR XML PATH('')
PRINT @VeryLongText /*WILL be truncated*/
SSMSの「XMLデータ」制限が十分に高く設定されていることを確認してください!
私の解決策は少しラウンドアバウトでしたが、そこに着きました (出力が65535文字未満である限り):
[〜#〜] update [〜#〜]:これが機能することを示すために、1つの100,000文字の列を選択するSQLを次に示します。グリッド出力をcsvファイルに保存すると、100,000文字すべてが切り捨てられません。
DECLARE @test nvarchar(MAX), @i int, @line nvarchar(100)
SET @test = ''; SET @i = 100
WHILE @i < 100000
BEGIN
SET @test = @test + STUFF(REPLICATE('_', 98) + CHAR(13) + CHAR(10), 1, LEN(CAST(@i AS nvarchar)), CAST(@i AS nvarchar))
SET @i = @i + 100
END
SELECT @test
ノート:
私はXMLをエクスポートしようとしてこれに遭遇しました。これは私が使用したソリューションです:
[グリッドへの結果]オプションを選択し、[結果]ペインに表示されるリンクを右クリックし、[結果に名前を付けて保存]を選択し、[すべてのファイル]ファイルタイプを選択し、ファイルに名前を付けて[保存]をクリックします。すべてのxmlデータがファイルに正しく保存されます。
SSMS 10を使用していますが、Torreのソリューションが機能しませんでした。エクスポートウィザードは、入力列がイメージであると考え続けました。
「入力列「XML_F52E2B61-18A1-11d1-B105-00805F49916B」(26)」のデータ型はDT_IMAGEです
SSMSでは、行からデータを選択した場合、少数の文字に制限されますが、行からデータを編集した場合、完全な値がそこに表示されます。常にそこにあるとは限りませんが、ctrl-a、ctrl-cをエディターに貼り付けると、すべてそこにあります。
通常、XMLを使用して、出力として巨大なデバッグ文字列を取得します(Lukeのテストハーネスを使用)。
declare @test nvarchar(max), @i int, @line nvarchar(100)
set @test = ''; set @i = 100
while @i < 100000
begin
set @test = @test + stuff(replicate('_', 98) + char(13) + char(10), 1, len(cast(@i as nvarchar)), cast(@i as nvarchar))
set @i = @i + 100
end
-- ctrl+d for "results to grid" then click the xml output
--select cast('<root>' + @test + '</root>' as xml)
-- revised
select @test for xml path(''), type;
選択肢が与えられた場合、クエリは「For XML Auto」または「For XML Raw」または「For XML explicit」としてデータを返すため、制限がはるかに高くなり、出力結果をさらに活用できます。
別の回避策は、このトリッキーなクエリに HeidiSql を使用します。フィールド長に制限はありません。
あなたが話している切り捨ては、Management Studioでのみ発生します。列を別のアプリにプルしても、切り捨てられません。
Query Analyzerを使用してSQL Server 2005と通信する方法はありません。ManagementStudioを意味しますか?