ДЛЯ запроса XML SQL для генерации заголовка записи

#sql #sql-server #xml #tsql #subquery

#sql #sql-сервер #xml #tsql #подзапрос

Вопрос:

Я пытаюсь сгенерировать XML, используя запрос FOR XML SQL. Структура XML довольно проста, за исключением того, что требование требует дополнительного подэлемента, который должен появляться только один раз в верхней части документа между корневым элементом и элементом записи. Вот пример:

 <Employees xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RecordHeader>
        <CreatedBy>My Organization</CreatedBy>
        <CreateDate>1900-01-01T01:01:01-06:00</CreateDate>
     </RecordHeader>
    <Employee>
        <EmployeeID>4</EmployeeID>
        <FirstName>Rob</FirstName>
        <LastName>Walters</LastName>
    </Employee>
    <Employee>
        <EmployeeID>168</EmployeeID>
        <FirstName>Rob</FirstName>
        <LastName>Caron</LastName>
     </Employee>
 </Employees>
  

Я создал запрос FOR XML, но, похоже, я не могу заставить его работать должным образом для RecordHeader. Есть предложения? Спасибо!

 SELECT 
(SELECT 'My Organization' as [CreatedBy],
    CONVERT(VARCHAR(33), GetDate(), 126) as [CreateDate] FOR XML PATH('RecordHeader'), ELEMENTS),
EmployeeID, FirstName, LastName
FROM Employees
FOR XML PATH('Employee'), ROOT('Employees'), ELEMENTS
  

Ответ №1:

 Declare @Employee table (EmployeeID int,First_Name varchar(50),Last_Name varchar(50))
Insert into @Employee values
(1,'John','Smith'),
(2,'Jane','Doe'  )


Select (Select CreatedBy='My Organization',CreateDate=GetDate() For XML Path('RecordHeader'),Type ) 
      ,(Select * From @Employee For XML Path('Employee'),Type ) 
For XML Path ('Employees'),Type
  

ВОЗВРАТ

 <Employees>
  <RecordHeader>
    <CreatedBy>My Organization</CreatedBy>
    <CreateDate>2016-10-18T16:09:48.110</CreateDate>
  </RecordHeader>
  <Employee>
    <EmployeeID>1</EmployeeID>
    <First_Name>John</First_Name>
    <Last_Name>Smith</Last_Name>
  </Employee>
  <Employee>
    <EmployeeID>2</EmployeeID>
    <First_Name>Jane</First_Name>
    <Last_Name>Doe</Last_Name>
  </Employee>
</Employees>
  

Комментарии:

1. Сработало отлично! Спасибо!