2017-07-22 38 views
1

我有一個表Category有三列ID (int), Name (nchar 150), Description (nchar 500),當我嘗試使用這個sql查詢SELECT * FROM [CATEGORY] FOR XML PATH轉換爲XML,我得到這樣的結果:FOR XML路徑中未使用的空間?

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

爲什麼使用'nchar'而不是'nvarchar'? –

+0

如果沒有錯,在傳遞給'for xml path'前清除所有空格字符..沒有其他方法..使用用'char(n)'替換'函數來替換空格字符 –

+0

@Pரதீப்'RTRIM '。雖然修復源表的模式似乎是有保證的。 –

回答

4

的問題是源表的定義。

你的名字和描述在現實中顯然不是固定的長度,所以你不應該使用固定長度的數據類型。它們將填充尾部空格以填充聲明的長度。這意味着即使實際值更短,每行也會消耗這兩列的1,300字節。

nchar列更改爲nvarchar,並通過在兩列上使用rtrim運行更新語句來刪除已添加的尾隨空格。

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

這是我第一次使用'For XML Path'從句,我一直認爲我們可以設置nchar或nvarchar最大長度但使用的空間將只是實際使用的空間。非常感謝您的參與。 :d – Angela