Синтаксис для чтения xml внутри хранимой процедуры - PullRequest
1 голос
/ 17 февраля 2020

Я передаю в @xCriteria параметр XML, который выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<searchParameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <includeInactive enabled="True" />
</searchParameters>

Я знаю, что xpath: //includeInactive/@enabled

И попытался:

--determine if we include inactive users
DECLARE @isInactive AS bit

-- SELECT @isInactive = @xCriteria.value('(/includeInactive/@enabled', 'bit')
-- SET @isInactive = @xCriteria.query('/includeInactive/@enabled')
-- SELECT @isInactive.value('(/includeInactive/enabled)[1]', 'bit')
-- SELECT @isInactive = @xCriteria.query('/includeInactive/@enabled')  

PRINT '@isInactive'
PRINT @isInactive

Как получить логическое значение?

1 Ответ

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

Вы пытаетесь сделать так:

DECLARE @isInactive AS BIT;

SELECT
    @isInactive = CASE @param.value('(/searchParameters/includeInactive)[1]/@enabled', 'bit') 
                     WHEN 1 THEN 0 ELSE 1
                  END

SELECT @isInactive;

В основном вам нужно выбрать первый ((....)[1]) <includeInactive> узел внутри узла root, а затем получить атрибут @enabled, который node.

И вам нужно неуклюжее выражение CASE, так как ваш XML хранит значение enabled , в то время как переменная, которую вы хотите получить, прямо противоположна - @ isInactive .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...