1

我的sql很简单

从 Emp FOR XML AUTO, ELEMENTS, ROOT('customers') 中选择 ID 作为 [Employee ID],EmpName 作为 [Employee Name],Sal 作为 [Salary]

当我执行这个 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 文件名,那么您可以理解该字段名是由于空间而动态生成的。<Employee_x0020_ID>1</Employee_x0020_ID> 这是动态生成的,但我希望它应该像 <Employee ID>1</Employee ID> 一样生成。我希望在 xml 文件名中保留空间。所以请告诉我该怎么做........谢谢

4

3 回答 3

6

来自W3Schools 的XML Elements :

XML 元素必须遵循以下命名规则:

  • 名称可以包含字母、数字和其他字符
  • 名称不能以数字或标点符号开头
  • 名称不能以字母 xml(或 XML,或 Xml 等)开头
  • 名称不能包含空格

可以使用任何名称,不保留任何字词。

(重点补充)

于 2011-01-21T08:39:44.387 回答
4

我想这是同一个问题? SQL Server 2005 中的 FOR XML AUTO 和列名有空格问题

答案是一样的。XML 标记名称中不能有空格。

于 2011-01-21T07:45:40.757 回答
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>
于 2011-01-21T09:08:10.790 回答