从包含 XML 的 sql 列中提取值
Posted
技术标签:
【中文标题】从包含 XML 的 sql 列中提取值【英文标题】:Extract value from a sql column that contains XML 【发布时间】:2015-08-03 23:28:03 【问题描述】:我正在尝试从包含 XML 的 SQL Server 表中的列中获取值,但该列的类型不是XML
,而是TEXT
。
我试过了:
SELECT
[Id],
[Request]
FROM
[Tracker]
WHERE
[Request].value('/Credit[1]/Loan[1]/LoanApp[1]/Applicant[1]/Personal[1]/Individals[1]/Individual[1]/GivenName[1]/FirstName[1]', 'nvarchar(50)') = 'Tom'
但我收到此错误:
找不到“Request”列或用户定义的函数或聚合“Request.value”,或者名称不明确。
我尝试像这样投射列:
select
CAST(CAST(Request AS NTEXT) AS XML).value('(/Credit[1]/Loan[1]/LoanApp[1]/Applicant[1]/Personal[1]/Individuals[1]/Individual[1]/GivenName[1]/FirstName[1]', 'nvarchar(50)')
from Tracker
但是我得到了这个错误:
XML 解析:第 1 行,第 15 个字符,应为字符串文字
我尝试了此链接中的解决方案: Unable to cast TEXT to XML in SQL Server
XML parsing: line 1, character 15, A string literal was expected
这是我尝试过的:
SELECT
CAST(
REPLACE(CAST(Request AS VARCHAR(MAX)), 'encoding="utf-16"', 'encoding="utf-8"')
AS XML).value('(Credit/Loan/App/Applicant/Personal/Individuals/Individual/GivenName/FirstName/text())[1]', 'NVARCHAR(max)') as UserGuid
FROM Tracker
【问题讨论】:
Unable to cast TEXT to XML in SQL Server的可能重复 【参考方案1】:你的投射是正确的
select CAST(CAST(Request AS NTEXT)AS
XML).value('(/Credit[1]/Loan[1]/LoanApp[1]/Applicant[1]/Personal[1]/Individuals[1]/Individual[1]/GivenName[1]/FirstName[1]', 'nvarchar(50)')
from Tracker]
但是您收到错误的可能原因之一是您没有在单引号或双引号中指定属性。
例如,您的 Request
文本字段中有 <credit id=12>
,您需要在将其转换为 XML 之前将其更改为 <credit id='12'>
或 <credit id="12">
。
【讨论】:
但我无法更改 XML,它是 100000 条记录,表中带有 XML 的我不应该更改它们,我的代码应该可以使用它。【参考方案2】:将您的对象投射到String
,然后使用XmlTextReader
和ReadXml
。
【讨论】:
以上是关于从包含 XML 的 sql 列中提取值的主要内容,如果未能解决你的问题,请参考以下文章
如何从以 BLOB 类型存储在列中的 XML 中提取数据(通过 SQL 查询)