与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>
答案 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)