Как проверить, что у элемента XML есть атрибут с пустым строковым значением - PullRequest
1 голос
/ 11 марта 2011

Есть ли способ проверить, что значение элемента в поле XML имеет пустой размер, используя SQLXML?Предположим, у меня есть следующие данные в столбце Conf таблицы Test:

<Conf>
  <UserData>
    <data type="str" value="" />
  </UserData>
</Conf>

. Я могу проверить, существует ли data, используя следующий запрос SQL:

SELECT Test.Conf.exist('/Conf/UserData/data') FROM Test;

Но как я могу проверить, что data имеет пустой value?Это может быть что-то вроде следующего, но это не работает:

SELECT Test.Conf.value('(/Conf/UserData/data/@value)[1]', 'nvarchar(max)')='' FROM Test;

Мое окончательное решение - использовать следующий оператор SQL:

SELECT Test.Conf.value('string-length(/Conf[1]/UserData[1]/data[1]/@value)', 'int') FROM Test;

Ответы [ 3 ]

1 голос
/ 11 марта 2011

Использование XPath 1.0.string(@someattribute) test должен вернуть false, если пуст.Я ничего не знаю о SQLXML, но он будет работать, если вы сможете использовать управляющую последовательность.

1 голос
/ 11 марта 2011

Возможно, это сработает.

SELECT Test.Conf.exist('data(/Conf/UserData/data[@value=''''])') FROM Test;

Проверяет, существует ли элемент данных с @value = ''.

0 голосов
/ 12 марта 2011

Проблема не в XPath, а в синтаксисе TSQL.

XML.Exist возвращает тип данных BIT, указывающий, существует ли он. SQL Server не имеет собственного типа данных BOOLEAN (настоящее true / false).

Итак, ваш запрос должен был быть

SELECT CASE WHEN Test.Conf.value('(/Conf/UserData/data/@value)[1]', 'nvarchar(max)')=''
       THEN 1 ELSE 0 END
FROM Test;
...