2011-02-23 2 views
0

У меня есть база данных SQL Server 2008. Существует таблица называется Documents со следующей схемой:Как запросить XML в SQL XML в базе данных SQL Server 2008

Id   int  PK  
DocumentXml xml 

XML-документы все выглядят что-то вроде:

<docroot> 
    <name>Some Name</name> 
</docroot> 

Я хочу, чтобы выбрать все записи, в которых текстовое значение /docroot/name начинается с " S "(case-insenstive).

Как выполнить этот запрос с наилучшей производительностью?

ответ

1

Не уверен, что о производительности - но вы можете сделать что-то вроде этого:

SELECT (list of columns) 
FROM dbo.Documents 
WHERE DocumentXml.value('(/docroot/name)[1]', 'varchar(100)') LIKE 'S%' 

Если параметры сортировки базы данных не чувствительны к регистру, эта операция LIKE также будет нечувствительна к регистру.

1

Я хочу, чтобы выбрать все записи, в которых текстовое значение /docroot/name начинается с «S» (случай-insenstive).

Используйте это XPath выражение:

/*/name[starts-with(translate(.,'S','s'), 's')] 
+0

+1 для чистого пути XPath. – Flack

+0

XPath хорош, но в той части, с которой у меня были проблемы, было объединение XPath и SQL – smartcaveman

+0

@smartcaveman: Извините, я не могу вам помочь, но я спрошу некоторых людей, которые знают. –

Смежные вопросы