用SQL提取XML数据
我将以下XML数据存储在SQL表中用SQL提取XML数据,sql,xml,stored-procedures,Sql,Xml,Stored Procedures,我将以下XML数据存储在SQL表中 <CustomFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd"> <Field fieldNam
<CustomFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd">
<Field fieldName="ChangeRequest">No</Field>
<Field fieldName="ProblemRecord">No</Field>
<Field fieldName="Source">Email</Field>
<Field fieldName="KB_Article">No</Field>
<Field fieldName="OptimusRef">264692</Field>
<Field fieldName="TimeSpentOnTicket">0.25</Field>
<Field fieldName="PONumber" />
<Field fieldName="ResourceAssignedEngineer" />
不
不
电子邮件
不
264692
0.25
我想做的是从存储过程中选择TimePentonicket值
有什么办法吗?这里的问题是XML。它是无效的,所以在修复它之前,没有真正的方法来搜索它。检查这一点的一个简单方法是使用在线工具,如。我看到的另一个问题是您引用的名称空间(xmlns)不再存在。我想这也会把博士后搞得一团糟,但我不是100%同意。你可能需要在吞食时过滤掉它。但是,在修复XML之后,在适当的范围内使用它可以很容易地将内容导出 例如,使用下表:
CREATE TABLE BLA.TEMPTABLE (ID INT, MYXML XML)
然后,插入XML的有效版本:
INSERT INTO BLA.TEMPTABLE ( ID, MYXML )
SELECT 1 as ID,
'<?xml version="1.0" encoding="UTF-8"?>
<CustomFields>
<Field fieldName="ChangeRequest">No</Field>
<Field fieldName="ProblemRecord">No</Field>
<Field fieldName="Source">Email</Field>
<Field fieldName="KB_Article">No</Field>
<Field fieldName="OptimusRef">264692</Field>
<Field fieldName="TimeSpentOnTicket">0.25</Field>
<Field fieldName="PONumber" />
<Field fieldName="ResourceAssignedEngineer" />
</CustomFields>' as MYXML
顺便说一句,XPATH返回一个数组,因此如果您只需要数组中的第一个值,您可以从BLA.tentable执行如下操作
SELECT ID,MYXML,(XPATH('/CustomFields//Field[@fieldName=''timesponticket']/text(),MYXML))[1]
SELECT
tt.ID,
tt.MYXML,
XPATH('/CustomFields//Field[@fieldName=''TimeSpentOnTicket'']/text()', tt.MYXML)
FROM
BLA.TEMPTABLE tt