0

类似于从 SQL 中获取存储在 varchar 中的 xml 数据,VARCHAR我需要从存储在列中的 XML 字符串中提取一个值。

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

这在 SQL Server 2000 中可行吗?

例如对于以下 XML,我如何选择<status>节点中的值:

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

3 回答 3

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>'))))
于 2012-09-12T10:54:43.803 回答
1

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

于 2012-09-12T10:49:09.097 回答
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)
于 2012-09-12T11:34:19.930 回答