#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. Сработало отлично! Спасибо!