2009-10-02 56 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