web-dev-qa-db-ja.com

XML出力はSQLで切り捨てられます

結果セットをXMLで返す必要があり、これは正常に機能しますが、レコード数が増えると、xml出力はtruncatedになります。これがクエリです。

select t.id,t.name,t.address from test FOR XML AUTO, ROOT('Response'), ELEMENTS

ただし、次のように出力結果セットを増やすオプションを設定しました。

Tools --> Options --> Query Results --> SQL Server --> Results to Text --> Maximum              
number of characters displayed in each column
Tools --> Options --> Results --> Maximum characters per column

しかし、それでも私は希望する結果を得ることができません。

私の解決策を提案してください

編集:ただし、XMLをクリックすると、別のクエリウィンドウで開き、すべてのxmlがここに表示されますが、切り捨てられたxmlではなくすべてのxmlが返されません。

ありがとう....

21
Muhammad Akhtar

ManagementStudioとxmlの結果セットで同じ問題が発生しました。 SqlDataReaderを使用してc#でプログラム的に出力を取得することで、これを解決しました。

5
Axarydax

次のことを試してください。

Declare @xmldata xml
set @xmldata = (select ... From test for xml...)
select @xmldata as returnXml
58
user3791994

私も同じ問題を抱えていました。クエリ結果の設定を[無制限]に変更しましたが、機能しませんでした。回避策があります。それほどきれいではありませんが、SQL Server Management Studioを引き続き使用して、結果を取得したい場合。クエリを微調整して、以下を使用して保存されたxmlを変換します。

convert(xml,'<xml><![CDATA[' + cast(MyColumnWithXml as varchar(max)) + ']]></xml>') 

全文が返されます。最後にいくつかのフォーマットを行う必要があることに注意してください

5
Vin

これは私にとってはうまくいきました(SSMS 2012):ツール>オプション>クエリ結果> SQL Server>グリッドへの結果:再試行された最大文字数:XMLデータ:無制限。次に、グリッドの結果をファイルに保存しました。

2
JohnH

SSMSオプションを変更した後もXML結果セットが切り捨てられる場合は、XMLステートメントを実行する前に:XMLONオプションを指定してSQLCMDユーティリティを使用してください。 -oスイッチを使用して、出力をファイルに送信します。 SQLCMDは、非常に簡単に使用できるコマンドラインユーティリティです。 http://msdn.Microsoft.com/en-us/library/ms162773.aspx を参照してください。

1
user1001713

クエリ出力ウィンドウに表示されるXML出力は、実際には有効なXMLドキュメントを保存するためのものではありません。 ADOまたは.NETのSQLXML管理クラスを使用してストリームとしてキャプチャすると、SQLServerから有効なXMLを取得できます。

ただし、SQL Server Management Studioで、[ツール] >> [オプション] >> [クエリ結果] >> [SQL Server] >> [テキストへの結果] >> [各列に表示される最大文字数]に移動して、クエリの出力サイズを制限できます。

0
Dinesh

私はこの質問が10年前のように尋ねられたことを知っていますが、それでも誰かがDB側での変更を必要とせず、受け入れられた回答に少し似ているが、ではない回避策を探している場合SqlDataReader

DataTableを利用し、SqlDataAdapterを使用して入力することができます。 XMLデータが複数の行に分割される場所。

例えば

string xmloutput = "";
var cmd = new SqlCommand("<some sql query that returns data in xml format>", con);
var da = new SqlDataAdapter(cmd);
var dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
    foreach (DataRow dr in dt.Rows)
    {
        xmloutput  += dr[0].ToString();
    }

注:

  • 上記のコードは、DBデータを含むXMLから1つの列のみが返されることを前提としています。

そして後で、変数xmloutputを利用します。

0
vikscool