Как запросить значение XML, получая ноль - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь работать с файлами .rdl для извлечения определенной информации. Я попробовал это и получаю нулевое значение в результате и не могу понять это. Новое в xml Вот T Sql:

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)' )  

1 Ответ

1 голос
/ 04 февраля 2020

Необходимо указать пространство имен по умолчанию.

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 |
+-----------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...