我正在尝试从包含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.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
答案 0 :(得分:0)
你的演员是正确的
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]
但是你得到错误的一个可能原因是你没有在单引号或双引号中指定属性。
例如,您在<credit id=12>
文本字段中有Request
,在将其转换为XML之前,您需要将其更改为<credit id='12'>
或<credit id="12">
。
答案 1 :(得分:0)
将您的对象投放到String
,然后使用XmlTextReader
和ReadXml
。