簡體   English   中英

在 SQL Server 2008 中如何讀取 XML 列?

[英]How do you read XML column in SQL Server 2008?

我從來沒有在 SQL Server 2008 中使用過 XML,我需要將客戶列表提取到一個變量表中,你怎么做?

鑒於我在Sales表中有一個名為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>

嘗試這樣的事情:

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

您需要使用 CROSS APPLY 從表到 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 列。 出於性能原因,不要使用“//Customer”,而是使用絕對路徑而不是“/ArrayOfCustomers/Customer”。 '//Customer' 將遍歷整個 XML 以在任何級別的 XML 中的任何位置查找Customer節點。

試試這個查詢:

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM