Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 XML и строковые операции сравнения  [new]
tsyoma
Member

Откуда:
Сообщений: 31
Возможно уже обсуждалось но я не нашел.
Пример
DECLARE @xVal AS XML
SET @xVal = '
<root>
	<Value ValID="6" ValStr="Данил" isActive="1" />
	<Value ValID="7" ValStr="Артем" isActive="1" />
	<Value ValID="13" isActive="1">
		<XML>
		  <root>0</root>
		</XML>
	</Value>
</root>
'

SELECT x.val.value('(@ValID)', 'int') AS ValInt
      , x.val.value('(@ValStr)', 'varchar(250)') AS ValStr
      , x.val.query('XML/*')AS ValXML
FROM @xVal.nodes('/root/Value') AS x (val)
необходимо выбрать нулл если XML пустая
NULLIF(x.val.query('XML/*'),'') AS ValXML
не проходит тк разные типы XML и varchar
можно ли как то проверить не конвертируя xml в строку???
24 ноя 09, 09:56    [7967979]     Ответить | Цитировать Сообщить модератору
 Re: XML и строковые операции сравнения  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
tsyoma
необходимо выбрать нулл если XML пустая
Объясните, пожалуйста, подробнее, что значит "пустая" ?
24 ноя 09, 10:06    [7968057]     Ответить | Цитировать Сообщить модератору
 Re: XML и строковые операции сравнения  [new]
tsyoma
Member

Откуда:
Сообщений: 31
Выборка возвращает три строки в первых двух в столбце с XML пусто что именно не знаю но не NULL
а задача сделать именно NULL :)
24 ноя 09, 10:16    [7968157]     Ответить | Цитировать Сообщить модератору
 Re: XML и строковые операции сравнения  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
SELECT x.val.value('(@ValID)', 'int') AS ValInt
      , x.val.value('(@ValStr)', 'varchar(250)') AS ValStr
      , cast(nullif(cast(x.val.query('XML/*') as varbinary(1024)), 0xfffe) as xml) AS ValXML
FROM @xVal.nodes('/root/Value') AS x (val)
?
24 ноя 09, 10:21    [7968207]     Ответить | Цитировать Сообщить модератору
 Re: XML и строковые операции сравнения  [new]
tsyoma
Member

Откуда:
Сообщений: 31
через конверт понятно что можно но я думал возможно есть какие то стандартные методы при работе с XML
24 ноя 09, 10:28    [7968270]     Ответить | Цитировать Сообщить модератору
 Re: XML и строковые операции сравнения  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
tsyoma
какие то стандартные методы при работе с XML
SELECT x.val.value('(@ValID)', 'int') AS ValInt
      , x.val.value('(@ValStr)', 'varchar(250)') AS ValStr
      , nullif(x.val.query('XML/*'),cast('' as xml)) AS ValXML
FROM @xVal.nodes('/root/Value') AS x (val)

Msg 305, Level 16, State 1, Line 14
The xml data type cannot be compared or sorted, except when using the IS NULL operator.
24 ноя 09, 10:30    [7968289]     Ответить | Цитировать Сообщить модератору
 Re: XML и строковые операции сравнения  [new]
tsyoma
Member

Откуда:
Сообщений: 31
Решения так и не нашел. Придется использовать каст
24 ноя 09, 11:32    [7968889]     Ответить | Цитировать Сообщить модератору
 Re: XML и строковые операции сравнения  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
x.val.value('empty(XML/*)','Bit') = 1
не катит?
24 ноя 09, 20:28    [7973237]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить