복붙노트

[SQL] 어떻게 2008 SQL 서버에서 XML 열을 읽습니까?

SQL

어떻게 2008 SQL 서버에서 XML 열을 읽습니까?

나는 SQL Server 2008의 XML을 사용한 적이, 나는 당신이 그것을 어떻게 변수 테이블에 고객의 목록을 추출해야?

나는 판매 테이블하여 customerList라는 열이 있음을 감안할 때 그 어떻게 SQL에서 고객의 목록을 추출 할 아래 같은 같은 외모?

<ArrayOfCustomers xmlns:xsd="http://www.w3.org/2001/XMLSchema"        
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Customer>
       <ItemId>1</ItemId>
       <Value>Mr Smith</Value>
   </Customer>
   <Customer>
      <ItemId>2</ItemId>
      <Value>Mr Bloggs</Value>
   </Customer>
</ArrayOfCustomers>

해결법

  1. ==============================

    1.이 같은 시도 :

    이 같은 시도 :

    SELECT
       Cust.value('(ItemId)[1]', 'int') AS 'ItemID',
       Cust.value('(Value)[1]', 'Varchar(50)') AS 'Customer Name'
    FROM
       dbo.Sales.CustomerList.nodes('/ArrayOfCustomers/Customer') AS AOC(Cust)
    

    즉,이 같은 출력 무언가를 제공해야합니다 :

    ItemID  Customer Name
       1         Mr Smith
       2         Mr Bloggs
    
  2. ==============================

    2.당신은 CROSS을 사용하는 XML 열에 테이블에서 적용해야

    당신은 CROSS을 사용하는 XML 열에 테이블에서 적용해야

    create table sales (customerlist xml)
    insert sales select '
        <ArrayOfCustomers xmlns:xsd="http://www.w3.org/2001/XMLSchema"        
                          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
           <Customer>
               <ItemId>1</ItemId>
               <Value>Mr Smith</Value>
           </Customer>
           <Customer>
              <ItemId>2</ItemId>
              <Value>Mr Bloggs</Value>
           </Customer>
        </ArrayOfCustomers>'
    
    SELECT
       N.C.value('ItemId[1]', 'int') ItemId,
       N.C.value('Value[1]', 'varchar(100)') Value
    FROM dbo.Sales
    CROSS APPLY CustomerList.nodes('//Customer') N(C)
    

    편집 - 참고 쿼리는 위의 표 (다중 행)에 XML 컬럼 작업을 설명하기 위해 신속하게 작성되었습니다. 성능상의 이유로, '// 고객'를 사용하는 대신 '/ ArrayOfCustomers / 고객을'절대 경로를 사용하지 마십시오. '// 고객은'모든 수준에서 XML 어디서나 고객 노드를 찾기 위해 전체 XML을 통해 이동합니다.

  3. from https://stackoverflow.com/questions/4815836/how-do-you-read-xml-column-in-sql-server-2008 by cc-by-sa and MIT license