Sql Server中查询xml
有个好几年前建的表,有个ntext类型的字段,储存xml数据。考虑转成xml后再查询,但是直接这样转,性能极差:
select top 100 xmlstring from foo with (nolock) where cast(cast(xmlstring as nvarchar(max)) as xml).value('(/foo/bar)[1]', 'varchar(max)') like 'true'
想了下,先转成xml,存到临时表
select cast(cast(xmlstring as nvarchar(max)) as xml) as xmlstr into #txml from foo
(顺便说一下,正式的代码中(比如存储过程中)一般应避免用select into,容易出问题,应该老老实实先create table,然后再insert into,这里因为是临时用一下,所以就偷下懒)
然后再检索,性能没问题了,但是却查不出来,看了下,原来根元素有个xml命名空间,查了下资料,改成
;WITH XMLNAMESPACES(DEFAULT 'http://tempuri.org/foo.xsd') select xmlstr from #txml where xmlstr.value('(/foo/bar)[1]', 'varchar(max)') like 'true'
终于查出来了

浙公网安备 33010602011771号