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

Chọn dữ liệu từ tệp XML dưới dạng bảng trong TSQL

set @xmlData='<?xml version="1.0"?>
<ArrayOfSpangemansFilter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SpangemansFilter>
<FilterID>1219</FilterID>
<Name>Fred</Name>
<Code>510</Code>
<Department>N</Department>
<Number>305327</Number>
</SpangemansFilter>
<SpangemansFilter>
<FilterID>3578</FilterID>
<Name>Gary</Name>
<Code>001</Code>
<Department>B</Department>
<Number>0692690</Number>
</SpangemansFilter>
<SpangemansFilter>
<FilterID>3579</FilterID>
<Name>George</Name>
<Code>001</Code>
<Department>X</Department>
<Number>35933</Number>
</SpangemansFilter>
</ArrayOfSpangemansFilter>'


SELECT 
  ref.value('FilterID[1]', 'int') AS FilterID ,
  ref.value('Name[1]', 'NVARCHAR (10)') AS Name ,
  ref.value('Code[1]', 'NVARCHAR (10)') AS Code ,
  ref.value('Department[1]', 'NVARCHAR (3)') AS Department,
  ref.value('Number[1]', 'int') AS Number      
FROM @xmlData.nodes('/ArrayOfSpangemansFilter/SpangemansFilter') 
xmlData( ref )

Sản xuất:

FilterID    Name       Code       Department Number
----------- ---------- ---------- ---------- -----------
1219        Fred       510        N          305327
3578        Gary       001        B          692690
3579        George     001        X          35933

Lưu ý:[1] là cần thiết để chỉ ra rằng bạn muốn chọn giá trị đầu tiên của chuỗi vì truy vấn có thể trả về nhiều hơn một giá trị phù hợp trên mỗi hàng (hãy tưởng tượng XML của bạn chứa một số FilterID trên mỗi SpangemansFilter).

Tôi nghĩ điều này hữu ích khi biết, vì vậy tôi đã lên Google và đọc nhiều bài đăng cho đến khi tôi tìm thấy this.

CẬP NHẬT Để tải từ tệp:

DECLARE @xmlData XML
SET @xmlData = (
  SELECT * FROM OPENROWSET (
    BULK 'C:\yourfile.xml', SINGLE_CLOB
  ) AS xmlData
)

CHỌN @xmlData



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi nên sử dụng cột varchar (max) nội tuyến hay lưu trữ nó trong một bảng riêng?

  2. Cập nhật cột int trong bảng với các giá trị tăng dần duy nhất

  3. Thay đổi đối chiếu SQL Server thành phân biệt chữ hoa chữ thường từ phân biệt chữ hoa chữ thường?

  4. T-SQL:kiểm tra định dạng email

  5. Cách khắc phục “Máy chủ không được định cấu hình cho TRUY CẬP DỮ LIỆU” trong SQL Server