Я пытаюсь разобрать образец xml, но я не получаю ожидаемый вывод, я использую openxml для этого:
Это код:
declare @myxml xml =
'<Departments>
<Department>
<Employees>
<Employee user="J" id="J10" method="email" date="06/13/2018 08:59">
</Employee>
<Employee user="R" id="R10" method="email1" date="07/13/2018 08:59">
</Employee>
</Employees>
</Department>
<Department>
<Employees>
<Employee user="Jason" id="J101" method="email" date="06/13/2018 08:59">
</Employee>
<Employee user="Roy" id="R101" method="email1" date="07/13/2018 08:59">
</Employee>
</Employees>
</Department>
</Departments>'
declare @i int =2;
declare @x_path varchar(5000) = (select 'Departments/Department[' + cast(@i as varchar) + ']' )
DECLARE @hDoc AS INT, @SQL NVARCHAR (MAX)
EXEC sp_xml_preparedocument @hDoc OUTPUT, @myxml
SELECT name,id,method,user_date
FROM OPENXML(@hDoc, @x_path)
WITH
(
name [varchar](1000) 'Employees/Employee/@user',
id [varchar](1000) 'Employees/Employee/@id',
method [varchar](1000) 'Employees/Employee/@method',
user_date [varchar](1000) 'Employee/Employee/@date'
)
EXEC sp_xml_removedocument @hDoc
go
Я получаю только 1 строку, но я хочу 2 строки:
Вывод вышеуказанного запроса:
name id method user_date
Jason J101 email NULL
Ожидаемый результат:
name id method user_date
Jason J101 email 06/13/2018 08:59
Roy R101 email 07/13/2018 08:59
Примечание
Я хочу выполнять итерации только через второй отдел, поэтому я добавил [@i] в путь, чтобы убедиться, что он повторяется только для 2-го отдела.
и значение i будет определяться динамически, на данный момент я установил его равным 2.
Любая помощь будет принята с благодарностью.
Спасибо