Как я могу вернуть значение определенного атрибута в столбце XML для всех строк в таблице SQL Server? - PullRequest
3 голосов
/ 17 января 2012

Итак, я потратил весь день на поиски хороших примеров использования xpath / xquery как части запроса SQL Server для возврата значений из столбца данных XML безрезультатно.

Вот что я пытаюсь сделать. У меня есть следующий XML в столбце данных XML в таблице:

<Document ID="156">
  <Version>1.0</Version>
  <LastModifiedInVersion>1.0</LastModifiedInVersion>
  <Signatures />
  <Controls>
    <Control ID="TB1">
      <Value>Hello world!</Value>
    </Control>
  </Controls>
  <AutoKeys />
</Document>

Я пытаюсь написать запрос SQL Server, который будет возвращать значение атрибута ID узла Document. Я хочу сделать это для всех строк в таблице, и все данные XML начинаются в том же формате.

Любая помощь будет принята с благодарностью! Мне действительно нужен чистый пример, и я могу взять его оттуда!

Ответы [ 3 ]

8 голосов
/ 17 января 2012

Так что это весь XML в столбце XML вашей таблицы ??

В этом случае используйте что-то вроде этого:

SELECT
   (list of other columns),
   XmlColumn.value('(/Document/@ID)[1]', 'int') AS 'DocumentID'
FROM
   dbo.YourTable

Вызов .value() в основном принимает XPath в качестве своегопервый параметр и тип T-SQL в качестве второго параметра, и возвращает это значение XML в качестве данного типа данных T-SQL для вашего запроса.

1 голос
/ 19 июня 2014

Если ваш xml сохранен в базе данных как обычная строка, конвертируйте и запрашивайте его немедленно

SELECT CONVERT(XML, [XMLStringColumn]).value('(/Document/@ID)[1]', 'int') 
FROM yourTable
0 голосов
/ 17 января 2012
SELECT xmlcol.value('(//Document/@ID)[1]','int') AS DocID  FROM xmltable
...