Я выполняю следующий запрос к базе данных ReportServer.
SELECT ItemID, CAST(CAST(Content AS VARBINARY(MAX)) AS XML) Content
FROM dbo.Catalog
WHERE Type = 8
Я хочу извлечь список полей столбца Content
. Столбец content
имеет тип данных XML
и содержит XML примерно так:
<SharedDataSet xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/shareddatasetdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSet Name="DataSet1">
<Query>
<DataSourceReference>DDSDB</DataSourceReference>
<CommandText>SELECT z.AccessoryPercent
,CASE
WHEN z.AccessoryPercent>0.20 Then 1
WHEN z.AccessoryPercent >=0.10 THEN 0
ELSE -1
end AS AccessoryState
FROM (
SELECT (a.FixedPrice - a.NetSalesPrice)/a.FixedPrice AS AccessoryPercent
FROM acc.Fact_Crm_Accessory a
)z</CommandText>
</Query>
<Fields>
<Field Name="AccessoryPercent">
<DataField>AccessoryPercent</DataField>
<rd:TypeName>System.Decimal</rd:TypeName>
</Field>
<Field Name="AccessoryState">
<DataField>AccessoryState</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
</Fields>
</DataSet>
</SharedDataSet>
Мой ожидаемый результат:
DataSetName Field
-------------------------------------
DataSet1 AccessoryPercent
DataSet1 AccesspryState
Заранее спасибо
РЕДАКТИРОВАТЬ : я написал следующий запрос для облегчения работы над запросом.
CREATE TABLE #t (data XML)
INSERT INTO #t
VALUES('<SharedDataSet xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/shareddatasetdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSet Name="DataSet1">
<Query>
<DataSourceReference>DDSDB</DataSourceReference>
<CommandText>SELECT z.AccessoryPercent
,CASE
WHEN z.AccessoryPercent>0.20 Then 1
WHEN z.AccessoryPercent >=0.10 THEN 0
ELSE -1
end AS AccessoryState
FROM (
SELECT (a.FixedPrice - a.NetSalesPrice)/a.FixedPrice AS AccessoryPercent
FROM acc.Fact_Crm_Accessory a
)z</CommandText>
</Query>
<Fields>
<Field Name="AccessoryPercent">
<DataField>AccessoryPercent</DataField>
<TypeName>System.Decimal</TypeName>
</Field>
<Field Name="AccessoryState">
<DataField>AccessoryState</DataField>
<TypeName>System.Int32</TypeName>
</Field>
</Fields>
</DataSet>
</SharedDataSet>')
SELECT *
FROM #t AS t