Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

OPENXML với xmlns:dt

Có lý do cụ thể nào mà bạn cần sử dụng OPENXML để thực hiện việc này không? Bạn có thể dễ dàng lấy thông tin bằng XQUERY năm 2005 như thế này:

declare @xmldata xml    
set @xmldata = 
'<data xmlns="http://www.aaa.com/master_browse_response" xmlns:dt="http://www.aaa.com/DataTypes">
  <products>
    <product>
      <product_id>121403</product_id>
      <countries>
        <dt:country>GBR</dt:country>
        <dt:country>USA</dt:country>
      </countries>
    </product>
  </products>
</data>'

;WITH XMLNAMESPACES 
(
    DEFAULT 'http://www.aaa.com/master_browse_response',
    'http://www.aaa.com/DataTypes' as dt
)
SELECT  x.c.value('(../../product_id)[1]', 'varchar(100)') as product_id,
        x.c.value('(.)[1]', 'varchar(100)') as country
FROM @xmldata.nodes('/data/products/product/countries/dt:country') x(c)

Các khả năng XQUERY mới hơn là lựa chọn tốt hơn nhiều để giải quyết vấn đề của bạn.

CHỈNH SỬA:Giải pháp tương tự với OPENXML sẽ là:

declare @xmldata xml    
set @xmldata = 
'<data xmlns="http://www.aaa.com/master_browse_response" xmlns:dt="http://www.aaa.com/DataTypes">
  <products>
    <product>
      <product_id>121403</product_id>
      <countries>
        <dt:country>GBR</dt:country>
        <dt:country>USA</dt:country>
      </countries>
    </product>
  </products>
</data>'

DECLARE @hDoc int, @rootxmlns varchar(100)
SET @rootxmlns = '<root xmlns:hm="http://www.aaa.com/master_browse_response" xmlns:dt="http://www.aaa.com/DataTypes"/>'
EXEC sp_xml_preparedocument @hDoc OUTPUT, @xmldata, @rootxmlns

SELECT *
FROM OPENXML(@hDoc, '//hm:product/hm:countries/dt:country',2)
        WITH(Country    varchar(100) '.',
             Product_ID varchar(100) '../../hm:product_id')

EXEC sp_xml_removedocument @hDoc


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng XEvent Profiler để nắm bắt các truy vấn trong SQL Server

  2. Quản lý giao dịch đồng thời bằng cách sử dụng khóa trong SQL Server

  3. Thay đổi chênh lệch múi giờ trên giá trị datetimeoffset trong SQL Server (T-SQL)

  4. Tìm các đối tượng bị hỏng trong SQL Server

  5. Lựa chọn bộ xử lý thực tế cho khối lượng công việc OLTP SQL Server 2014/2016