Я хочу, чтобы произвести файл XML в следующем формате:Multiple XML атрибуты
<ProData>
<DataSet Name="ABCD">
<Data DataElement="AAA" Value="10"/>
<Data DataElement="BBB" Value="20"/>
</DataSet>
<DataSet Name="EFGH">
<Data DataElement="CCC" Value="NAME"/>
<Data DataElement="DDD" Value="SURNAME"/>
</DataSet>
</ProData>
Каждая строка из MyTable должна иметь запись PRODATA в XML производства. Моего Стол этот
CREATE TABLE MyTable(
[CustomerNumber] [nvarchar](6) NOT NULL,
[AAA_Value] Int NOT NULL,
[BBB_Value] Int NOT NULL,
[Name] [nvarchar](10) NOT NULL,
[Surname] [nvarchar](10) NOT NULL
)
INSERT [dbo].[MyTable] ([CustomerNumber], [AAA_Value], [BBB_Value], [Name], [Surname]) VALUES (N'123456', 10, 20, N'Phoebe', N'Buffay')
INSERT [dbo].[MyTable] ([CustomerNumber], [AAA_Value], [BBB_Value], [Name], [Surname]) VALUES (N'234567', 30, 40, N'Ross', N'Geller')
Поэтому желаемый результат должен быть:
<ProData>
<DataSet Name="ABCD">
<Data DataElement="AAA" Value="10"/>
<Data DataElement="BBB" Value="20"/>
</DataSet>
<DataSet Name="EFGH">
<Data DataElement="CCC" Value="Phoebe"/>
<Data DataElement="DDD" Value="Buffay"/>
</DataSet>
</ProData>
<ProData>
<DataSet Name="ABCD">
<Data DataElement="AAA" Value="30"/>
<Data DataElement="BBB" Value="40"/>
</DataSet>
<DataSet Name="EFGH">
<Data DataElement="CCC" Value="Ross"/>
<Data DataElement="DDD" Value="Geller"/>
</DataSet>
</ProData>
Я использую FOR XML PATH
запрос для получения моих XML
файла, но я не могу добиться успеха в получении нескольких вложенных элементов, из-за следующее сообщение об ошибке:
The same attribute cannot be generated more than once on the same XML tag.
Мой запрос состоит в следующем:
(SELECT
blah,
'AAA' as 'Common/Data/ProData/DataSet/Data/@DataElement',
AAA_Value AS 'Common/ApplicationData/ProData/DataSet/Data/@Value' ,
'BBB' as 'Common/Data/ProData/DataSet/Data/@DataElement' ,
BBB_Value as 'Common/Data/ProData/DataSet/Data/@Value',
blah
FROM MyTable
FOR XML PATH('Notification'),ROOT('NotificationsList'),
TYPE)
FOR XML PATH ('NotificationFile')
мне удалось получить желаемый результат, «заставляя» в ResultSet с вложенным запросом, как это:
(SELECT blah,
(SELECT
(SELECT
(SELECT 'AAA' AS 'Data/@DataElement' ,
AAA_Value AS 'Data/@Value'
FROM MyTable WHERE CONDITION
FOR xml path(''), TYPE),
(SELECT 'BBB' AS 'Data/@DataElement' ,
BBB_Value AS 'Data/@Value'
FROM MyTable WHERE CONDITION
FOR xml path(''), TYPE),
FOR xml path('DataSet'), TYPE)
FOR xml path('ProData'), TYPE) ,
blah
FROM MyTable
FOR XML PATH('Notification'),ROOT('NotificationsList'),
TYPE )
FOR XML PATH ('NotificationFile')
Я уверен, что это ужасный способ сделать это, но я не могу похоже, не справится с этим лучше. Может кто-нибудь мне помочь?
Спасибо
как насчет предоставления нам данных, которые вы использовали, чтобы мы могли попытаться помочь? – Matt
Я представил план стола. Спасибо! – NotApplicable
Привет, нет, вы не указали свой макет таблицы, просто некоторые имена столбцов ... Пожалуйста, предоставьте реальное определение таблицы (с типами) и некоторые строки данных образца вместе с ожидаемым выходом для этих данных ... – Shnugo