2010-03-01 122 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')