2010-03-01 128 views
0

这里是我的查询:格式的XML从SQL返回的XML

select EmployeeName, EmployeeSalary from Employee2 
    for xml path('EmployeeDetails') 

回报

<EmployeeDetails> 
    <EmployeeName>xxxxx</EmployeeName> 
    <EmployeeSalary>5000.00000</EmployeeSalary> 
</EmployeeDetails> 

我怎样才能得到输出

<EmployeeDetails> 
    <EmployeeName = xxxxx /> 
    <EmployeeSalary = 5000.00000/> 
</EmployeeDetails> 
+7

您要求的XML不是有效的XML – 2010-03-01 01:22:38

回答

1

你应该看看For Xml Explicit。例如,因此使用下面的架构:

Create Table #Employees 
(
    Id int not null identity(1,1) primary key clustered 
    , EmployeeName nvarchar(100) not null 
    , EmployeeSalary decimal(18,4) not null 
) 

Insert #Employees Values('ABC', 12345) 
Insert #Employees Values('DEF', 67890) 
Insert #Employees Values('GHI', 11223) 

和下面的查询:

Select 1 As Tag 
    , Null As Parent 
    , Id As [EmployeeDetails!1!Id!Hide] 
    , Null As [EmployeeName!2!Name] 
    , Null As [EmployeeSalary!3!Salary] 
From #Employees 
Union All 
Select 2 As Tag 
    , 1 As Parent 
    , Id 
    , EmployeeName 
    , Null 
From #Employees 
Union All 
Select 3 As Tag 
    , 1 As Parent 
    , Id 
    , Null 
    , EmployeeSalary 
From #Employees As EmployeeDetails 
Order By [EmployeeDetails!1!Id!Hide] 
For Xml Explicit 

我得到这是接近的情况如下:

<EmployeeDetails> 
    <EmployeeName Name="ABC"/> 
    <EmployeeSalary Salary="12345.0000"/> 
</EmployeeDetails> 
<EmployeeDetails> 
    <EmployeeName Name="DEF"/> 
    <EmployeeSalary Salary="67890.0000"/> 
</EmployeeDetails> 
<EmployeeDetails> 
    <EmployeeName Name="GHI"/> 
    <EmployeeSalary Salary="11223.0000"/> 
</EmployeeDetails> 
2

你不能,那不是有效的XML

如果你想要类似

<EmployeeDetails Name="xxxxx" Salary="5000.00000" /> 

然后可以这样做,但它没有什么区别。 XML是XML。诀窍是AUTO关键字

select EmployeeName, EmployeeSalary from Employee2 
for xml AUTO 

如果您想对XML布局采用精确控制这类垃圾

Select 
    (Select EmployeeName, EmployeeSalary From Employee2 For XML Auto, Type) 
    .query(
     '<Slaves>{ 
      for $employee in /Employee2 
      return 
       <Slave Name="{data($employee/@EmployeeName)}" Salary="{data($employee/@EmployeeSalary)}"/> 
     }</Slaves>' 
    ) 

SQL Server是不是真的对XML序列化的地方。你确定你不应该在另一个组件中做这件事吗?通常你的公共接口(UI,API等)

0

选择EmployeeName,EmployeeSalary从和Employee2 FOR XML AUTO,ROOT('EmployeeDetails')