У вас уже есть одно решение от Jeroen (ссылка на документацию).Но - просто для удовольствия - я хотел бы показать вам, что есть несколько способов:
DECLARE @xml XML=
N'<root xmlns:ns="dummy">
<ns:test>1</ns:test>
</root>';
- подстановочный знак для пространства имен
IF @xml.exist('//*:test[text()=1]')=1
PRINT 'test 1-yes'
ELSE
PRINT 'test 1-no';
- встроенное объявление(как сказано в документации)
IF @xml.exist('declare namespace ns="dummy";//ns:test[text()=1]')=1
PRINT 'test 2-yes'
ELSE
PRINT 'test 2-no';
- вы можете использовать все вышеперечисленное для установки переменной
DECLARE @check BIT = @xml.exist('//*:test[text()=1]');
- И - при необходимости - вы все еще можете использоватьWITHXMLNAMESPACES, как здесь, чтобы установить переменную
WITH XMLNAMESPACES('dummy' AS ns)
SELECT @check=@xml.exist('//ns:test[text()=1]');
IF @check=1
PRINT 'test 4-yes'
ELSE
PRINT 'test 4-no';
В целом это пахнет немного процедурный ... Может быть, есть лучший подход полностью ...