How do you read XML column in SQL Server 2008?

后端 未结 3 481
被撕碎了的回忆
被撕碎了的回忆 2020-11-30 14:39

I have never used XML in SQL Server 2008, I need to extract a list of customers into a variable table how do you do it?

Given that I have a column called Custo

相关标签:
3条回答
  • 2020-11-30 15:23

    Try this query:

    SELECT  AccountDetail.value('(/Accounts/Account/AccountNumber)[1]', 'varchar(100)') AS AccountNumber,
         AccountDetail.value('(/Accounts/Account/PayeeName)[1]', 'varchar(1000)') AS PayeeName,
         AccountDetail.value('(/Accounts/Account/Amount)[1]', 'decimal(20,2)') AS Amount
    FROM [dbo].[AccountDetails]
    
    0 讨论(0)
  • 2020-11-30 15:28

    You need to use CROSS APPLY from table to XML column

    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>'
    

    Your query:

    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)
    

    EDIT - note
    The query above was written quickly to illustrate working with xml columns in a table (multi-row). For performance reasons, don't use '//Customer' but use an absolute path instead '/ArrayOfCustomers/Customer'. '//Customer' will go through the entire XML to find Customer nodes anywhere in the XML at any level.

    0 讨论(0)
  • 2020-11-30 15:31

    Try something like this:

    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)
    

    That should give you an output something like this:

    ItemID  Customer Name
       1         Mr Smith
       2         Mr Bloggs
    
    0 讨论(0)
提交回复
热议问题