SQL Server XQuery в одну строку?

 DECLARE @myXml XML

 SET @myXml =  CONVERT(xml, '<a key="2"></a>', 1)

 SELECT  s.value('@key', 'VARCHAR(8000)')   AS myKey from   @myXml.nodes('/a')  t(s)

отвечать :

введите здесь описание изображения

что хорошо.

Я хочу сделать это без объявления переменной @myXml.

Что-то типа :

 SELECT  
    s.value('@key', 'VARCHAR(8000)') AS myKey 
 FROM 
    CONVERT(xml, N'<a key="2"></a>', 1) .nodes('/a')  t(s)

но я получаю сообщение об ошибке:

введите здесь описание изображения


person Royi Namir    schedule 09.01.2012    source источник


Ответы (2)


Ты можешь сделать:

Select CONVERT(xml, N'<a key="2"></a>', 1).value('a[1]/@key', 'varchar(8000)')
person Ta01    schedule 09.01.2012
comment
@Royi Namir: Это ограничивает вас одним экземпляром тега «a» под корнем. Если вам нужно более одного экземпляра (если ваша реальная строка XML более сложна, чем в вашем примере), вам понадобится другой подход, который фактически разбивает XML, как это делал ваш первый пример (и мой, ниже, делает). Если есть только один тег 'a', подход kd7, безусловно, будет быстрее. - person mwigdahl; 09.01.2012

Это должно работать:

;WITH xgen (xdata)
AS
(
    SELECT CONVERT(xml, '<a key="2"></a>', 1) AS xdata
)
select s.value('@key', 'VARCHAR(8000)')   AS myKey 
from xgen
    cross apply xgen.xdata.nodes('/a') t(s)
person mwigdahl    schedule 09.01.2012