使用FOR XML PATH结构创建值列表, 我发现(令人讨厌的是)它总是为选定的值添加一个尾随空格。
这破坏了我提供自己的分隔符的尝试 - 在列之后添加了尾随空格并且分隔符已连接到分隔符。
例如:
SELECT country + '-' FROM countryTable...
产生以下字符串:
china- france- england-
有没有其他人看过这个,有没有办法阻止它?
我不认为TRIM()会起作用,因为在插入额外空格之前会应用它...
我正在使用SQL Server 2016。
由于
答案 0 :(得分:2)
我怀疑country
列中的数据,如果Country列中的每个值都有前导空格怎么办?对于XML PATH
,不会为数据添加任何空间
试试这个
SELECT RTRIM(LTRIM(country)) + '-' FROM countryTable...
答案 1 :(得分:2)
好的,感谢John C和他的样本查询,我找到了罪魁祸首。
我在列名/分隔符后面有一个AS [data()]
子句。
删除删除了尾随空格。 我不知道怎么/为什么但它确实......
答案 2 :(得分:0)
您可能有前导/尾随空格和/或CRLF。也许这会有所帮助
Declare @countryTable table (country varchar(100))
Insert Into @countryTable values
(' china'), -- leading space
(char(13)+'france'), -- leading char(13)
(char(10)+'england') -- leading char(10)
Select Value=Stuff((Select Distinct '-' + ltrim(rtrim(replace(replace(country,char(13),''),char(10),'')))
From @countryTable
Where 1=1
For XML Path ('')),1,1,'')
返回
Value
china-england-france
答案 3 :(得分:0)
out_dir = read_from_file(FILENAME)
... FOR XML PATH
添加到此from MS Help
如果指定为列名的路径为
AS [data()]
,则该值将被视为生成的XML中的原子值。如果序列化中的下一个项目也是原子值,则会向XML添加空格字符。这在创建列表类型元素和属性值时很有用。
当你在这里写字时...... AS 某事。然后某些用作每个选定值的打开/关闭标记标记。
添加2.可以在select clausule中连接每行的更多文件。对于字符串类型以外的其他类型,必须将值转换为字符串类型data()