2010-12-09 50 views
1

My Sp藉助SQL Server中的OPENXML讀取XML文件數據。OPENXML - SQL Server

這裏有一個小問題。下面是XML文件的一部分

<Name_Address> 
    <name>JCB SALES PVT</name> 
    <address>24, SALAROURIA ARENA ADUGODI</address> 
    <address>HOSUR MAIN ROAD, Honolulu</address> 
    <country>N</country> 
</Name_Address> 

和我的SQL查詢

SELECT 
    @address = CONVERT(VARCHAR(150), [TEXT]) 
FROM OPENXML(@idoc,'/Name_Address/address', 0) 
WHERE [text] IS NOT NULL 

在@address我得到最後的地址標記值即

HOSUR MAIN ROAD, Honolulu 

但應

24, SALAROURIA ARENA ADUGODI, HOSUR MAIN ROAD, Honolulu 

我該如何做到這一點?

幫幫我,指導我這樣做。

問候

+0

什麼**版本**的SQL Server你使用?? – 2010-12-09 06:14:29

+0

我正在使用sql 2000. – Humdum 2010-12-09 06:39:34

回答

2

你的問題不是專門做與OPENXML。

您查詢......

SELECT CONVERT(VARCHAR(150), [TEXT]) 
FROM OPENXML(@idoc,'/Name_Address/address', 0) 
WHERE [text] IS NOT NULL 

...返回多行。所以當你分配給一個變量時,它只需要返回最後一行。

我已經設置了一個使用遊標來遍歷這個的例子。它包含您的示例文檔。您可以直接將其粘貼到查詢分析器(2000)/ Management Studio(2005+)中並運行。所有你需要做的就是添加你的逗號和空格(我剛剛使用了一個空格)。

DECLARE @hdoc int 
DECLARE @doc varchar(1000) 
DECLARE @address varchar(150) 
DECLARE @thisaddress varchar(150) 
set @address = '' 
SET @doc =' 
<Name_Address> 
    <name>JCB SALES PVT</name> 
    <address>24, SALAROURIA ARENA ADUGODI</address> 
    <address>HOSUR MAIN ROAD, Honolulu</address> 
    <country>N</country> 
</Name_Address>' 

EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc 

DECLARE addr_cursor CURSOR 
    FOR SELECT CONVERT(VARCHAR(150), [TEXT]) 
    FROM OPENXML(@hdoc,'/Name_Address/address', 0) 
    WHERE [text] IS NOT NULL 

--select @@FETCH_STATUS 
OPEN addr_cursor 
FETCH NEXT FROM addr_cursor INTO @thisaddress 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    set @address = @address+ @thisaddress + ' ' 
    FETCH NEXT FROM addr_cursor INTO @thisaddress 
END 

select @address 

CLOSE addr_cursor 
DEALLOCATE addr_cursor 

exec sp_xml_removedocument @hdoc