2011-12-21 25 views
3

Я просто изучаю XQUERY и пытаюсь выполнить то, что, как я думал, будет очень простым. Вот мой T-SQL код:T-SQL, XQuery Invalid Column

DECLARE @XML xml 
set @xml = '<resultsets><AppVersion>13.0</AppVersion></resultsets>' 

-- Code below is wrong 
select 
ResultSets.AppVersion.query('AppVersion').value('.', 'varchar(100)') as AppVersion 
from @XML.nodes('/resultsets/AppVersion') ResultSets(AppVersion) 

Я не могу точно выяснить, как запросить этот внутренний элемент, AppVersion. Я не получаю никаких ошибок, но я не могу вернуть этот 13.0 внутри внутреннего элемента appversion. Кто-то может помочь?

ответ

2

У вас есть один AppVersion слишком много. Это возвращает ваш 13.0:

DECLARE @XML xml 
set @xml = '<resultsets><AppVersion>13.0</AppVersion></resultsets>' 

-- Code below is right 
select 
ResultSets.AppVersion.value('.', 'varchar(100)') as AppVersion 
from @XML.nodes('/resultsets/AppVersion') ResultSets(AppVersion) 

Ваш метод nodes уже спускается к AppVersion узлов, так что оттуда не нужно еще query, только value.

+0

Это работает отлично. Спасибо! – ccdrm

2

Если вам нужна только одна строка, в результате нет необходимости использовать nodes.

DECLARE @XML xml 
set @xml = '<resultsets><AppVersion>13.0</AppVersion></resultsets>' 

select @XML.value('(/resultsets/AppVersion)[1]', 'varchar(100)') as AppVersion 
+0

Также хорошее решение. Благодаря! – ccdrm

Смежные вопросы