从包含XML的sql列中提取值

时间:2015-08-03 23:28:04

标签: sql sql-server xml tsql

我正在尝试从包含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

2 个答案:

答案 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,然后使用XmlTextReaderReadXml