Как хранить и извлекать информацию XML из столбца типа nvarchar (max) и использовать ее в соединениях? - PullRequest
2 голосов
/ 02 сентября 2010

У меня есть столбец типа 'nvarchar (max)', который теперь должен содержать информацию XML, а не просто строку.

Скажите: col1 имеет значение 'abc' Теперь у него есть значения, с дополнительной информацией:

<el1>abc</el2>
<el2>someotherinfo</el2>

Сохранение информации в столбце хорошо, так как она все еще может быть вставлена ​​в виде строки. Однако извлекать ту же информацию, а также использовать / заменять ту же информацию 'abc' из этого столбца, которая используется в различных других объединениях из других таблиц, я не могу понять.

как я также могу вставить эту информацию в abcd, если она исходит из значения другой таблицы 'abcd', не теряя другую информацию?

Я создаю XML со стороны приложения и обновляю его в столбце типа nvarchar (). Все столбцы были заменены для хранения XML, поэтому безопасное допущение состоит в том, что col1 содержит только XML, аналогичный упомянутому выше. Просто нажмите XML, как есть, и он отлично работает. Однако как извлечь информацию, чтобы использовать ее в соединениях?

Как извлечь конкретный элемент из этой строки nvarchar (), чтобы использовать его в соединении ?? Ранее этот столбец «Col1» просто использовался как строка, и проверка выполнялась следующим образом:

where tablex.colx = table1.col1

или Обновление таблицы 2, где

1 Ответ

7 голосов
/ 02 сентября 2010

Как только вы приведете данные NVARCHAR к типу данных XML, вы можете использовать функции XML для получения значений элементов / атрибутов для присоединения к:

WITH xoutput AS (
  SELECT CONVERT(xml, t.nvarchar_column) AS col
    FROM YOUR_TABLE t)
SELECT x.*
  FROM TABLE x
  JOIN xoutput y ON y.col.value('(/path/to/your/element)[1]', 'int') = x.id

Он не сможет использовать индексы из-за преобразования типов данных ...

Альтернативная версия, с использованием IN:

WITH xoutput AS (
   SELECT CONVERT(xml, t.nvarchar_column) AS col
     FROM YOUR_TABLE t)
SELECT x.*
  FROM TABLE x
 WHERE x.id IN (SELECT y.col.value('(/path/to/your/element)[1]', 'int')
                  FROM xoutput)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...