我的sql非常简单
选择ID作为[员工ID],EmpName作为[员工姓名],Sal作为[薪资]来自Emp FOR XML AUTO,ELEMENTS,ROOT('customers')
当我执行这个sql然后我得到xml格式的输出。 xml输出是
<customers>
<Emp>
<Employee_x0020_ID>1</Employee_x0020_ID>
<Employee_x0020_Name>Tridip</Employee_x0020_Name>
<Salary>2500</Salary>
</Emp>
<Emp>
<Employee_x0020_ID>2</Employee_x0020_ID>
<Employee_x0020_Name>Ari</Employee_x0020_Name>
<Salary>4000</Salary>
</Emp>
<Emp>
<Employee_x0020_ID>3</Employee_x0020_ID>
<Employee_x0020_Name>Dibyendu</Employee_x0020_Name>
<Salary>3500</Salary>
</Emp>
</customers>
如果您看到xml字段名称,那么您可以理解该字段名称是动态生成的 由于空间。 &LT; Employee_x0020_ID→1&LT; / Employee_x0020_ID&GT;这是动态生成的,但我希望它应该像&lt; Employee ID&gt; 1&lt; / Employee ID&gt;一样生成。我希望空间应该保存在xml字段名称中。所以请告诉我该怎么做........谢谢
答案 0 :(得分:6)
来自W3Schools的XML Elements:
XML元素必须遵循以下命名规则:
可以使用任何名称,不保留任何单词。
(强调补充)
答案 1 :(得分:4)
我想这是同一个问题? FOR XML AUTO and column name with space problem in SQL Server 2005
答案是一样的。您不能在XML标记名称中包含空格。
答案 2 :(得分:1)
以下是您正在寻找的假装为XML的输出。 您甚至无法在任何解析器中将其强制转换为XML(至少它不应该 - 它不会在SQL Server中)。
;with emp(ID, EmpName, Sal) as (select
1, 'tridip', 2500 union all select
2, 'ari', 4000)
select replace(convert(varchar(max),(
select ID as [Employee ID], EmpName as [Employee Name], Sal as [Salary]
from Emp
FOR XML AUTO, ELEMENTS, ROOT('customers'))),
'_x0020_', ' ')
输出(为了清楚起见重新格式化 - SQL Server将其全部返回到一行)
<customers><Emp><Employee ID>1</Employee ID><Employee Name>tridip
</Employee Name><Salary>2500</Salary></Emp><Emp>
<Employee ID>2</Employee ID><Employee Name>ari</Employee Name>
<Salary>4000</Salary></Emp></customers>