2011-08-29 109 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' –