首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OPENXML - SQL Server

OPENXML - SQL Server
EN

Stack Overflow用户
提问于 2010-12-09 13:09:23
回答 1查看 2.8K关注 0票数 1

利用SQL Server中的OPENXML读取XML文件数据。

这里面有个小问题。这是xml文件部分

代码语言:javascript
复制
<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查询是

代码语言:javascript
复制
SELECT 
   @address = CONVERT(VARCHAR(150), [TEXT]) 
FROM OPENXML(@idoc,'/Name_Address/address', 0) 
WHERE [text] IS NOT NULL

在@address中,我正在获取最后一个地址标记值,即

代码语言:javascript
复制
HOSUR MAIN ROAD, Honolulu

但它应该是

代码语言:javascript
复制
24, SALAROURIA ARENA ADUGODI, HOSUR MAIN ROAD, Honolulu

我如何才能做到这一点?

帮帮我,引导我做这件事。

问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-09 16:22:34

您的问题并不是专门针对OPENXML的。

您的问题...

代码语言:javascript
复制
SELECT CONVERT(VARCHAR(150), [TEXT]) 
FROM OPENXML(@idoc,'/Name_Address/address', 0) 
WHERE [text] IS NOT NULL

...returns多行。所以当你赋值给一个变量时,它只需要返回的最后一行。

我已经设置了一个使用游标遍历的示例。它包括您的示例文档。您可以将其直接粘贴到Query Analyser (2000)/Management Studio (2005+)中,它将运行。您所要做的就是添加逗号和空格(我刚刚使用了一个空格)。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4395049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档