首页 > 解决方案 > 如何查询 XML 值,获取 null

问题描述

我正在尝试使用 .rdl 文件来提取某些信息。我已经尝试过了,结果是 null 并且无法弄清楚。xml 新手 这里是 TSql:

DECLARE @xml xml   
SET @xml= '<?xml version="1.0" encoding="utf-8"?>
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:cl="http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition">
  <DataSets>
    <DataSet>
      <Query>
        <DataSourceName>SyteLine</DataSourceName>
        <CommandType>StoredProcedure</CommandType>
        <CommandText>ItemABCAnalysisSp</CommandText>
      </Query>
    </DataSet>
  </DataSets>
</Report>'  

DECLARE @Value nvarchar(100)
SELECT  @xml.value('(/rd:Report/DataSets/DataSet/Query/CommandType)[1]', 'nvarchar(100)' )  

标签: xmltsql

解决方案


您需要指定一个默认命名空间。

SQL

DECLARE @xml xml = '<?xml version="1.0" encoding="utf-8"?>
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"
        xmlns:cl="http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition"
        xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition">
    <DataSets>
        <DataSet>
            <Query>
                <DataSourceName>SyteLine</DataSourceName>
                <CommandType>StoredProcedure</CommandType>
                <CommandText>ItemABCAnalysisSp</CommandText>
            </Query>
        </DataSet>
    </DataSets>
</Report>';

;WITH XMLNAMESPACES (DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition')
SELECT  @xml.value('(/Report/DataSets/DataSet/Query/CommandType/text())[1]', 'NVARCHAR(100)') AS [CommandType];

输出

+-----------------+
|   CommandType   |
+-----------------+
| StoredProcedure |
+-----------------+

推荐阅读