В таблице "Контакты" моей компании есть поле. В этой таблице есть столбец типа XML. В столбце содержатся разные данные о конкретном контакте. НАПРИМЕР.
<contact>
<refno>123456</refno>
<special>a piece of custom data</special>
</contact>
Теги под contact могут быть разными для каждого контакта, и я должен запросить эти фрагменты.
рядом со столбцами реляционных данных в той же таблице.
Я использовал такие конструкции, как:
SELECT c.id AS ContactID,c.ContactName as ForeName,
c.xmlvaluesn.value('(contact/Ref)[1]', 'VARCHAR(40)') as ref,
INNER JOIN ParticipantContactMap pcm ON c.id=pcm.contactid
AND pcm.participantid=2140
WHERE xmlvaluesn.exist('/contact[Ref = "118985"]') = 1
Этот метод работает нормально, но для ответа сервера требуется время. Я также исследовал использование функции nodes () для анализа узлов XML и exist (), чтобы проверить, содержат ли узлы значение, которое я ищу.
Кто-нибудь знает лучший способ запроса столбцов XML?
Я имею в виду, что серверу нужно много времени, чтобы вернуться с результатами





Я нашел лучшие практики msdn xml, полезные для работы со столбцами xml blob, могут дать некоторое вдохновение ... http://msdn.microsoft.com/en-us/library/ms345115.aspx#sql25xmlbp_topic4
В дополнение к странице, упомянутой @pauljette, на этой странице есть хорошие советы по оптимизации производительности:
http://msdn.microsoft.com/en-us/library/ms345118.aspx
Вы можете многое сделать, чтобы ускорить выполнение XML-запросов, но это никогда не будет так хорошо, как правильно проиндексированные реляционные данные. Если вы выбираете один документ, а затем запрашиваете внутри него, у вас все хорошо, но когда вашему запросу нужно просканировать кучу похожих документов в поисках чего-то, это похоже на поиск ключа в плане реляционного запроса ( то есть медленный).
Я прочитал эту статью во время пересмотра кода. Я последовал некоторым советам, но я очень ограничен в том, что я могу делать с БД. Я обновил наш sql-сервер до 2005 года около 6 месяцев назад.
Если вы выполняете одну запись и много чтений, воспользуйтесь попаданием синтаксического анализа во время записи и преобразуйте эти данные в некоторый формат, более удобный для запросов. Первым предложением было бы преобразовать их в связанную, но отдельную таблицу со столбцами name / value / contactID.
Если у вас есть XSD для вашего Xml, вы можете импортировать его в свою базу данных, а затем вы можете создавать индексы для своих данных Xml.
Попробуй это
ВЫБРАТЬ * ИЗ Журнала обновлений конверсии ГДЕ convert (XML, colName) .value ('(/ lead / lead / @ LeadID =' '[email protected]' ') [1]', 'varchar (max)') = 'истина'
Под трудоемкостью вы имеете в виду, что сервер долго отвечает или что для написания запроса требуется много усилий?