Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server XQuery retorna um erro


Sua expressão XPath pode levar ao retorno de várias linhas, para cada linha na tabela do SQL Server. Você precisará usar um CROSS APPLY e uma chamada para .nodes() para obter as informações que você procura:
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)

Isso deve retornar todos os JobCandidateID valores e todos os nomes definidos no Resume Coluna XML para cada linha na tabela.

Se você puder ter certeza de que sempre haverá um único <name> tag em sua coluna XML, então você também pode encurtar isso para:
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