Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Простейший вопрос по OpenXml  [new]
Open_Xml
Guest
Добрый день! Простейшая задача определить значение <version> в данном случае = 'ABC'
declare  @xml xml ,
         @iddocxml int

select @xml=
'<ROOT>
  <version>ABC</version>
</ROOT>'

EXEC sp_xml_preparedocument @iddocxml OUTPUT, @xml
;with cte 
    as
    (
            select * from openxml(@iddocxml,'/ROOT' )
             WITH (Val varchar(40) '/version')
    )
   select * from cte

SELECT 
          *     FROM OPENXML(@iddocxml, '/ROOT', 1)
                    WITH(  
                                        Val            VARCHAR(40)  '/version'
                )
                    
  EXEC sp_xml_removedocument @iddocxml

И получаю в итоге NULL Вопрос - как сделать правильно через OpenXml?
Спасибо
4 дек 17, 17:56    [21005173]     Ответить | Цитировать Сообщить модератору
 Re: Простейший вопрос по OpenXml  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1367
Open_Xml,

правильно - читать изначально справку.

+

declare  @xml xml ,
         @iddocxml int

select @xml=
'<ROOT>
  <version>ABC</version>
</ROOT>'

EXEC sp_xml_preparedocument @iddocxml OUTPUT, @xml
;with cte 
    as
    (
            select * from openxml(@iddocxml,'/ROOT' )
             WITH (Val varchar(40) 'version')
    )
   select * from cte

SELECT 
          *     FROM OPENXML(@iddocxml, '/ROOT', 1)
                    WITH(  
                                        Val            VARCHAR(40)  'version'
                )
                    
  EXEC sp_xml_removedocument @iddocxml

4 дек 17, 17:57    [21005175]     Ответить | Цитировать Сообщить модератору
 Re: Простейший вопрос по OpenXml  [new]
Open_Xml
Guest
felix_ff Спасибо!
4 дек 17, 18:41    [21005260]     Ответить | Цитировать Сообщить модератору
 Re: Простейший вопрос по OpenXml  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
И зачем было такой код городить, XQuery в данном случае будет намного быстрее:

DECLARE @xml XML = N'
<ROOT>
  <version>ABC</version>
</ROOT>'

SELECT @xml.value('(ROOT/version/text())[1]', 'VARCHAR(40)')
5 дек 17, 10:24    [21006317]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить