SQL Server 使用 FOR XML 符號轉換問題

starzodiac
2 min readNov 25, 2021

Replace “&lt;” and “&gt;” with “<” and “>” in sql server

如題,最近想做到欄位合併的功能,使用 stuff ((select ‘,’ + {column} FROM A WHERE B for XML)…) 遇到 “>”, “<” 經過 XML 轉後會變成 “&gt;” and “&lt;” 的問題

查了很久才發現跟 for XML 有關,原因可能是 <> 會跟 XML 格式有衝突,所以轉換過程會把 <> 轉成其他表示方式

解法:
stuff ((select ‘,’ + {column} FROM A WHERE B for XML type).value(‘.’, ‘[TYPE]’) …)
[TYPE] 是要轉換成的型態,建議大小設定剛好就好,這會影響 performance(e.g., VARCHAR(MAX) -> VARCHAR(128))
另外 value 只能是小寫,如果改成 VALUE 會認不到這個 key word

ref:

--

--