SQL Server 2000 - 从存储在VARCHAR中的XML中提取数据

时间:2012-09-12 10:45:14

标签: sql-server xml tsql sql-server-2000

Getting xml data stored in a varchar out of SQL类似,我需要从VARCHAR列中存储的XML字符串中提取值。

但是,数据在SQL Server 2000上,因此无法使用XML类型。

这在SQL Server 2000中是否可行?

e.g。对于以下XML,如何选择<status>节点中的值:

<entities>
    <entity>
        <name>foo</name>
        <status>1</status>
    </entity>
    <entity>
        <name>bar</name>
        <status>2</status>
    </entity>
</entities>

3 个答案:

答案 0 :(得分:2)

试试这个:

declare @xml varchar(1000)
SET @xml='<entities>
    <entity>
        <name>foo</name>
        <status>1</status>
    </entity>
    <entity>
        <name>bar</name>
        <status>2</status>
    </entity>
</entities>'
select @xml,SUBSTRING(@xml,CHARINDEX('<status>',@xml)+LEN('<status>'),(CHARINDEX('</status>',@xml)-(CHARINDEX('<status>',@xml)+LEN('<status>'))))

答案 1 :(得分:1)

你可以使用OPENXML;将文档中的示例适用于您的特定情况应该不会太困难。

答案 2 :(得分:1)

我认为openxml是解决问题的最佳方案。

DECLARE @xml VARCHAR(2000)
SET @xml = N'
<entities>
    <entity>
        <name statue="1">foo</name>
        <status>1</status>
    </entity>
    <entity>
        <name statue="2">bar</name>
        <status>2</status>
    </entity>
</entities>
'

DECLARE @docHandle int
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xml


SELECT *
   FROM OPENXML(@docHandle, N'/entities/entity',2)
WITH (name VARCHAR(20), status INT)