Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да направя заявка за стойност в XML колона в SQL Server 2008

Вашите XML данни са непълни - използват префикс на пространство от имена ns0 без да го дефинирам никъде... Добавих някакво произволно, напълно измислено XML пространство от имена тук в моя пример - трябва да проверите какво всъщност е това XML пространство от имена във вашия случай и съответно да адаптирате примера!

Опитайте това:

DECLARE @InputTable TABLE (ID INT NOT NULL, XmlData XML)

INSERT INTO @InputTable(ID, XmlData) VALUES(42, '<?xml version="1.0" encoding="UTF-8" ?>
<ns0:Root xmlns:ns0="urn:some-sample-xml-namespace">
    <ns0:Result>
        <ns0:AStatus>Aaa</ns0:AStatus>
        <ns0:BStatus>Bbb</ns0:BStatus>
    </ns0:Result>
</ns0:Root>')

-- define the XML namespace to use     
;WITH XMLNAMESPACES('urn:some-sample-xml-namespace' AS x)
SELECT 
    ID,
    XC.value('(x:AStatus)[1]', 'varchar(50)') 
FROM    
    @inputtable
CROSS APPLY
    -- get a "pseudo" table of nodes <ns0:Root>/<ns0:Result>
    XmlData.nodes('x:Root/x:Result') AS XT(XC)

По принцип трябва да имате дефиниция за вашия префикс на XML пространство от имена - и в SELECT срещу тези XML данни, трябва да имате същите XML пространство от имена (въпреки че - както е показано - префиксът, присвоен на това пространство от имена, може да бъде различен - но пространството от имена трябва да съвпада!).

След това избира данните от таблицата и за XML данните използва .nodes() Функция XQuery за получаване на списък с XML елемент, който съответства на този XPath израз - и получава тези възли като псевдо таблица в паметта XT с една XML колона XC от които след това можете отново да извлечете стойности (като достигане до първия <ns:AStatus> елемент).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql сървър 2008 Неуспешно влизане за потребител „NT AUTHORITY\NETWORK SERVICE“

  2. Вмъкване на ред само ако вече не е там

  3. Използвайте RAND() в User Defined Function

  4. SQL Server 2005 Как да изчистите план за изпълнение на заявка

  5. Какъв е обхватът на CONTEXT_INFO в SQL Server?