2011-08-29 108 views
0

我存储在XML列,看起来像这样的用户偏好:SQL Server 2008的XML属性搜索区分大小写

<tags> 
    <user> 
     <tag name="AB"/> 
    </user> 
</tags/> 

当我使用下面的查询,

select * 
from company 
where CAST(tags.query('tags/user/tag[fn:contains(@name,"Ab")]') as varchar(2000)) <> '' 

它没有返回任何结果,属性值是不同的情况下,然后在xml列中的一个。

有关使属性名称不区分大小写的任何想法?

感谢

回答

1

有了SQL Server 2008,你可以使用小写和大写功能,像这样:

select * from company where CAST(tags.query('tags/user/tag[fn:contains(lower-case(@name),"ab")]') as varchar(2000)) <>'' 

见:

New XQuery functions introduced in SQL Server 2008: upper-case() and lower-case()

lower-case Function (XQuery) (MSDN)

+0

非常感谢@jdavies。它正在工作,但查询需要很长时间才能执行。有没有更好的方式去做我正在尝试的? – FullMetal5000

+0

就我而言,您的查询没有任何问题(但我绝不是专家)。你公司的桌子很大吗?对于其他查询或表中的简单选择是否需要很长时间?也许你可以看看索引标签列:[索引XML数据类型列](http://msdn.microsoft.com/en-us/library/ms191497.aspx)。 – jdavies

+0

@ FullMetal5000 - 尝试使用存在,而不是转换和查询。 'tags.exist('tags/user/tag [fn:contains(lower-case(@name),“ab”)]')= 1' –