Я пытаюсь создать следующий XML-документ, и у меня возникли проблемы с пониманием того, как это сделать с помощью TSQL. Я провел много исследований и считаю, что могу это сделать, используя XML-путь вместо XML Explicit. Любая помощь, пытающаяся создать результат ниже, была бы весьма признательна.Создание XML с использованием TSQL
Образец Dataset:
CREATE TABLE #DataTable
(
PortfolioShortName varchar(20)
,PortfolioLongName varchar(255)
,BenchmarkName varchar(255)
,BenchmarkCode varchar(255)
,PositionGroupName varchar(255)
)
INSERT INTO #DataTable (PortfolioShortName,PortfolioLongName,BenchmarkName,BenchmarkCode,PositionGroupName)
VALUES ('TESTIG','Long Division Short Duration','SP 500','[email protected]','Test Strategy'),
('TESTEM','Short Duration Emerging Market','Dow','[email protected]','Test Strategy')
SELECT
*
FROM #DataTable dt
XML Я пытаюсь создать:
<?xml version="1.0" encoding="UTF-8"?>
<positionGroupMetadata xmlns="urn:TestingData-types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:TestingData:1.0:positiongroupmetadata-types file:///C:/Users/BillBill/Desktop/Schemas/positiongroupmetadata-types.xsd">
<setIdentification>
<client>Georgia Capital</client>
<name>Testing Service</name>
<date>20150924</date>
</setIdentification>
<positionGroupItemList>
<positionGroupItem>
<positionGroupID type="client">
<positionGroupValue>TESTIG</positionGroupValue>
</positionGroupID>
<tagGroupList>
<tagGroup>
<name>Benchmarks</name>
<tagList>
<tag>
<type>defaultBenchmarkName</type>
<value>Long Division Short Duration</value>
</tag>
<tag>
<type>defaultBenchmarkPrimaryIdentifier</type>
<value>[email protected]</value>
</tag>
</tagList>
</tagGroup>
</tagGroupList>
</positionGroupItem>
</positionGroupItemList>
<positionGroupByWeightList>
<positionGroupByWeight>
<positionGroupName>Test Strategy</positionGroupName>
<positionList>
<position>
<positionGroupID type="client">
<positionGroupValue>TESTIG</positionGroupValue>
</positionGroupID>
</position>
<position>
<positionGroupID type="client">
<positionGroupValue>TESTEM</positionGroupValue>
</positionGroupID>
</position>
</positionList>
</positionGroupByWeight>
</positionGroupByWeightList>
<reportSetList>
<reportSet>
<reportSetName>DailyReports</reportSetName>
<reportDataSetList>
<reportDataSet>
<reportDataSetName>TESTIG</reportDataSetName>
<positionGroup>
<positionGroupIDList>
<positionGroupID type="client">
<positionGroupValue>TESTIG</positionGroupValue>
<holdingGroupAlias>Portfolio</holdingGroupAlias>
</positionGroupID>
</positionGroupIDList>
</positionGroup>
</reportDataSet>
<reportDataSet>
<reportDataSetName>TESTIG</reportDataSetName>
<positionGroup>
<positionGroupIDList>
<positionGroupID type="client">
<positionGroupValue>TESTIG</positionGroupValue>
<holdingGroupAlias>Portfolio</holdingGroupAlias>
</positionGroupID>
</positionGroupIDList>
</positionGroup>
</reportDataSet>
</reportDataSetList>
</reportSet>
</reportSetList>
</positionGroupMetadata>
Это, насколько я мог бы получить. Я не уверен, как создать верхний список и проложить путь вверх по структуре.
SELECT DISTINCT
type = 'defaultBenchmarkPrimaryIdentifier'
,value = dt.BenchmarkName
FROM #DataTable dt
UNION ALL
SELECT
type = 'defaultBenchmarkPrimaryIdentifier'
,dt.BenchmarkCode AS defaultBenchmarkPrimaryIdentifier
FROM #DataTable dt
FOR XML PATH('tag'),ROOT('type');
Я не думаю, что вы дали нам достаточно информации .. или усилие – JamieD77
Здесь я. \t \t \t SELECT DISTINCT типа = '' defaultBenchmarkPrimaryIdentifier , значение = dt.BenchmarkName ОТ #DataTable дт UNION ALL ВЫБОРА типа = 'defaultBenchmarkPrimaryIdentifier' , dt.BenchmarkCode КАК defaultBenchmarkPrimaryIdentifier ОТ #DataTable дт ДЛЯ XML PATH ('тег'), ROOT ('type'); – Alex
Оформить заказ на этот ответ, может помочь http://stackoverflow.com/a/14778673/1370442 – bUKaneer