2017-07-22 10 views
1

私は、このSQLクエリSELECT * FROM [CATEGORY] FOR XML PATHを使用してXMLに変換しようとすると、私はこの結果を取得するには、3つの列ID (int), Name (nchar 150), Description (nchar 500)とテーブルCategoryを持っている:FOR XMLパスの未使用スペース?

<idCat>1</idCat> 
<CatName>Cat 1 ... 100 space character </CatName> 
<CatDesc>Desc 1 ... 500 space character </CatDesc> 
+0

なぜ、nvarcharではなくncharを使用していますか? –

+0

間違っていない場合は、 'for xml path'に渡す前にすべての空白文字をクリーンアップしてください..それ以外の方法はありません。' char(n) 'で' Replace'関数を使用してスペース文字を置き換えてください –

+0

@Pரதீப் 'RTRIM '。ソーステーブルのスキーマを修正することは正当だと思われます。 –

答えて

4

問題は、ソース表の定義です。

実際には名前と説明が固定長ではありませんので、固定長データ型を使用しないでください。宣言された長さを埋めるために末尾に空白が埋められます。これは、実際の値がはるかに短くても、各行がそれらの2つの列に対して1300バイトを消費していることを意味します。

ncharの列をnvarcharに変更し、両方の列でrtrimを使用して更新ステートメントを実行することによって追加された末尾の空白を削除します。

UPDATE Category 
SET Name = RTRIM(Name), Description = RTRIM(Description) 
+0

これは 'For XML Path'節を初めて使う時です。私はいつもncharやnvarcharを設定できると思っていました最大長さが使用されるスペースは、実際に使用されるスペースだけになります。あなたのお時間をありがとうございました。 :D – Angela

関連する問題