簡體   English   中英

SQL Server XQuery返回錯誤

[英]SQL Server XQuery returns an error

我正在對SQL Server 2012中的XML數據類型列執行查詢。數據的一個示例是:

<ns:Resume xmlns:ns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume">
  <ns:Name>
    <ns:Name.Prefix></ns:Name.Prefix>
    <ns:Name.First>Shai</ns:Name.First>
    <ns:Name.Middle></ns:Name.Middle>
    <ns:Name.Last>Bassli</ns:Name.Last>
    <ns:Name.Suffix></ns:Name.Suffix>
  </ns:Name>
  ...
</ns:Resume>

我正在嘗試編寫一個返回名字的查詢。

此查詢按預期返回名字列表:

WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume' AS ns)
SELECT [Resume].query('(//ns:Name.First)').value('.[1]', 'nvarchar(100)')
FROM   HumanResources.JobCandidate;

但是,此查詢返回錯誤:

WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume' AS ns)
SELECT [Resume].value('(//ns:Name.First)[1]', 'nvarchar(100)')
FROM   HumanResources.JobCandidate;

錯誤:

Msg 9314,Level 16,State 1,Line 2
XQuery [HumanResources.JobCandidate.Resume.value()]:無法隱式原子化或將'fn:data()'應用於復雜的內容元素,在推斷類型中找到'xs:anyType'類型(元素(ns { http:// schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume }:Name.First,xs:string)| element(ns { http://schemas.microsoft.com/sqlserver/2004/07/adventure- works / Resume }:Name.First,xs:anyType))?'。

我在這里缺少一些基本的理解,但我不確定它是什么。 有人可以開導我嗎? 為什么第二個查詢會返回錯誤?

對於SQL Server表中的每一行,您的XPath表達式可能會導致返回多行。 您需要使用CROSS APPLY和對.nodes()的調用來獲取您之后的信息:

WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume' AS ns)
SELECT 
    JobCandidateID,
    ResNames.value('(ns:Name.First)[1]', 'nvarchar(100)')
FROM   
    HumanResources.JobCandidate
CROSS APPLY
    [Resume].nodes('/ns:Resume/ns:Name') AS XTbl(ResNames)

這應返回表中每行的所有JobCandidateID值和Resume XML列中定義的所有名字。

如果您可以確定XML列中只有一個<name>標記,那么您還可以將其縮短為:

WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume' AS ns)
SELECT 
    JobCandidateID,
    [Resume].value('(/ns:Resume/ns:Name/ns:Name.First)[1]', 'nvarchar(100)')
FROM   
    HumanResources.JobCandidate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM