2009-10-02 55 views
0

我会尽可能清楚地解释这种情况。我有下面的这个查询,它试图从与书相关的sql server 2005中的xml列中获取author_id的列表,但将查询分配给@authorIds会返回一个错误,因为它返回多行,关于如何运行的任何想法这个问题?非常感谢你们。从sql中的多个xml行中获取值(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 

回答

1

你就行了错误 “FROM @ authorIds.nodes( '/作者/值')作为ParamValues(ID)”,它应该是“来自@ authorIds.nodes( '值')作为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

感谢您的反馈。我现在正在使用更简单的解决方案。 – simplyme 2009-10-27 13:57:18