簡體   English   中英

如何獲取varchar(MAX)字符串類型的XML標記的值?

[英]How to get value of an XML tag of varchar(MAX) string type?

我正在使用SQL Server 2016。

我有一個表employee_xml ,它有一個varchar(MAX)類型的employee_xml_string列。

CREATE TABLE employee_xml 
(
     employee_xml_id INT IDENTITY(1,1) NOT NULL, 
     employee_xml_string VARCHAR(MAX)
);

employee_xml_string列存儲XML字符串; 例如:

<?xml version="1.0" encoding="UTF-8"?>
<Employees xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Employee>
      <EmployeeNumber>58913A</EmployeeNumber>
      <FirstName>Shanee</FirstName>
      <LastName>McKenzie</LastName>
      <GovernmentIdentificationNumber>749146551</GovernmentIdentificationNumber>
   </Employee>
</Employees>

我想編寫SQL來獲取<GovernmentIdentificationNumber>標記的值。 我怎樣才能做到這一點?

謝謝

您必須將XML的值CAST / CONVERTxml (所以我希望它們都是有效的XML值),然后您可以對轉換后的值使用XQUERY:

SELECT V.Employee_XML.value('(Employees/Employee/GovernmentIdentificationNumber/text())[1]','int') AS GovernmentIdentificationNumber
FROM dbo.employee_xml E
     CROSS APPLY (VALUES(TRY_CONVERT(xml,E.employee_xml_string))) V(Employee_XML);

但是,理想情況下,您應該將XML數據存儲為xml ; 畢竟這就是它的用途。

您可以使用nodes在行中粉碎xml,然后可以選擇具有value的正確項:

;with x as
(
    select cast(employee_xml_string as xml) as employee_xml
    from employee_xml
)
SELECT
    t.s.value('.', 'nvarchar(max)') AS GovernmentIdentificationNumber
FROM x
CROSS APPLY x.employee_xml.nodes('//Employees/Employee/GovernmentIdentificationNumber') t(s)

結果:

在此輸入圖像描述

您可以將XML存儲為XML。 話雖如此,你總是可以CAST它:

SELECT employee_xml_xml.value('(/Employees/Employee/GovernmentIdentificationNumber)[1]', 'varchar(100)')
FROM employee_xml
CROSS APPLY (SELECT CAST(employee_xml_string AS xml)) AS x(employee_xml_xml)

暫無
暫無

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

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