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'

终于查出来了

posted @ 2025-05-16 03:46  平静寄居者  阅读(25)  评论(0)    收藏  举报