2009-10-02 8 views
0

Je tenterai d'expliquer cette situation aussi clairement que possible. J'ai cette requête ci-dessous qui essaie d'obtenir une liste de author_ids d'une colonne xml dans sql server 2005 associée à un livre, mais l'assignation de la requête à @authorIds renvoie une erreur car elle retourne plusieurs lignes, des idées sur comment courir ce problème? Merci beaucoup les gars.Saisir des valeurs à partir de plusieurs lignes xml en SQL (ms server 2005)

DECLARE @BookAuthor TABLE (ID int) 
DECLARE @authorIds xml 
SET @authorIds = (select ListOfAuthors.query('/Authors/value') from BookRelated where ListOfAuthors is not null) 

INSERT INTO @BookAuthor (ID) SELECT ParamValues.ID.value('.','VARCHAR(20)') 
FROM @authorIds.nodes('/Authors/value') as ParamValues(ID) 

SELECT a.ID, 
    FullName AS Author 

FROM Author auth 
INNER JOIN @BookAuthor a 
ON  a.ID = auth.Id 

Répondre

1

vous avez un bug sur la ligne "de @ authorIds.nodes ('/ Auteurs/valeur') comme ParamValues ​​(ID)" il devrait être « de @ authorIds.nodes ('valeur') comme ParamValues (ID) "

--- Test Data 
DECLARE @BookRelated TABLE (ListOfAuthors XML) 
DECLARE @Author TABLE (ID int, FullName VARCHAR(100)) 

INSERT INTO @BookRelated (ListOfAuthors) VALUES ('<Authors><value>1</value></Authors>') 
INSERT INTO @Author (ID, FullName) VALUES (1, 'Matt') 


-- test script 
DECLARE @BookAuthor TABLE (ID int) 
DECLARE @authorIds xml 

SET @authorIds = (
    select ListOfAuthors.query('/Authors/value') 
    from @BookRelated 
    where ListOfAuthors is not null) 

INSERT INTO @BookAuthor (ID) 
SELECT ParamValues.ID.value('.','VARCHAR(20)') 
FROM @authorIds.nodes('value') as ParamValues(ID) 

SELECT a.ID, FullName AS Author 
FROM @Author auth 
INNER JOIN @BookAuthor a ON a.ID = auth.Id 
+0

Merci pour les commentaires Matt. J'utilise une solution plus simple maintenant. – simplyme

Questions connexes