2009-10-02 3 views
0

가능한 한이 상황을 명확하게 설명하려고 시도합니다. 아래에이 책을 가지고있는 SQL Server 2005의 xml 열에서 author_ids 목록을 얻으려는 아래의 쿼리가 있지만 여러 행을 반환하기 때문에 @authorIds에 쿼리를 할당하면 오류가 발생합니다. 이 문제? 많은 분들께 감사드립니다.sql (SQL Server 2005)에서 여러 xml 행의 값 가져 오기

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

당신은 @ authorIds.nodes에서 "합니다"ParamValues ​​(ID)와 같은 ('/ 저자/값') @ authorIds.nodes FROM "라인에 버그가 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

관련 문제