Формат XML возвращается из SQL для XML - PullRequest
0 голосов
/ 01 марта 2010

Вот мой запрос:

   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>

Ответы [ 3 ]

2 голосов
/ 01 марта 2010

Вы не можете, это не правильный 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. Вы уверены, что не должны делать это в другом компоненте? Обычно ваши общедоступные интерфейсы (пользовательский интерфейс, API и т. Д.)

1 голос
/ 01 марта 2010

Вы должны посмотреть на 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>
0 голосов
/ 10 ноября 2015

выберите EmployeeName, EmployeeSalary из Employee2 FOR XML AUTO, ROOT ('EmployeeDetails')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...