我正在使用SQL Server 2016。
我有一个employee_xml表,它有一个varchar(MAX)
类型的employee_xml_字符串列。
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
;这毕竟是它的作用所在。