从SQL Server中的XML数据类型字段中提取数据

时间:2020-04-16 16:24:34

标签: sql sql-server xml

我在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&gt;0.20 Then 1 
        WHEN z.AccessoryPercent &gt;=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&gt;0.20 Then 1 
        WHEN z.AccessoryPercent &gt;=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

1 个答案:

答案 0 :(得分:2)

(1)我们需要考虑默认的名称空间。

(2)第二const处理数据集及其字段之间的一对多关系。

SQL

  MOCK_CONST_METHOD0(GetBar, Bar const&());

输出

test.cpp:86:46: error: no viable conversion from '(lambda at test.cpp:86:46)' to 'const Action<Accessor::Bar &()>'
        ON_CALL(*this, GetBar).WillByDefault([this]() -> Bar const& {
                                             ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/gmock/gmock-actions.h:357:7: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from '(lambda at test.cpp:86:46)' to 'const testing::Action<Accessor::Bar &()> &' for 1st argument
class Action {
相关问题