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

Làm cách nào để tôi có thể truy vấn một giá trị trong một cột XML trong SQL Server 2008

Dữ liệu XML của bạn chưa hoàn chỉnh - nó sử dụng tiền tố không gian tên ns0 mà không cần xác định nó ở bất kỳ đâu ... Tôi đã thêm một số không gian tên XML hoàn toàn tùy ý ở đây trong mẫu của mình - bạn cần kiểm tra không gian tên XML đó thực sự là gì trong trường hợp của bạn và điều chỉnh mẫu cho phù hợp!

Hãy thử điều này:

DECLARE @InputTable TABLE (ID INT NOT NULL, XmlData XML)

INSERT INTO @InputTable(ID, XmlData) VALUES(42, '<?xml version="1.0" encoding="UTF-8" ?>
<ns0:Root xmlns:ns0="urn:some-sample-xml-namespace">
    <ns0:Result>
        <ns0:AStatus>Aaa</ns0:AStatus>
        <ns0:BStatus>Bbb</ns0:BStatus>
    </ns0:Result>
</ns0:Root>')

-- define the XML namespace to use     
;WITH XMLNAMESPACES('urn:some-sample-xml-namespace' AS x)
SELECT 
    ID,
    XC.value('(x:AStatus)[1]', 'varchar(50)') 
FROM    
    @inputtable
CROSS APPLY
    -- get a "pseudo" table of nodes <ns0:Root>/<ns0:Result>
    XmlData.nodes('x:Root/x:Result') AS XT(XC)

Về cơ bản, bạn cần có định nghĩa cho tiền tố không gian tên XML của bạn - và trong SELECT đối với dữ liệu XML này, bạn cần phải có giống nhau Không gian tên XML (mặc dù - như được hiển thị - tiền tố được gán cho không gian tên đó có thể khác - nhưng không gian tên phải khớp!).

Thao tác này sau đó chọn dữ liệu từ bảng và đối với dữ liệu XML, nó sử dụng .nodes() Hàm XQuery để lấy danh sách phần tử XML phù hợp với biểu thức XPath này - và nó lấy các nút này dưới dạng bảng giả trong bộ nhớ XT với một cột XML duy nhất XC từ đó bạn có thể tìm nạp lại các giá trị (như tiếp cận với <ns:AStatus> đầu tiên phần tử).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dịch vụ không hiển thị trong Trình quản lý cấu hình SQL Server

  2. Chọn Thứ tự Sớm nhất cho một tập hợp các bài kiểm tra trong SQL dãy ngày

  3. Máy chủ Sql phải làm gì để tạo khóa đối chiếu từ một giá trị chuỗi

  4. Cần tính toán theo thời gian hoặc con số ngày được làm tròn trong máy chủ sql

  5. SQL Server BIGINT hoặc DECIMAL (18,0) cho khóa chính