GovernmentIdentificationNumber

GovernmentIdentificationNumber

我正在使用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;这毕竟是它的作用所在。

10-07 16:29