[英]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
/ CONVERT
為xml
(所以我希望它們都是有效的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.