Я предполагаю, что под xml-safe вы подразумеваете экранирование специальных тегов XML.Если у вас есть столбец XML, который вы хотите включить в другой документ XML, тогда у вас есть два варианта:
- проецировать столбец как
[*]
: select ..., xmlcolumn as [*], ... from ... for xml path...
, в результате содержимое XML столбца будет встроено врезультат XMl.Например.если столбец имеет значение <element>value</element>
, то результат будет похож на <root><row><element>value</element></row></root>
. - проецирует столбец как имя столбца:
select ..., xmlcolumn, ... from ... for xml path...
это вставит содержимое столбца как значение (т. Е. Оно будет экранировано).Например.то же значение, что и выше, даст <root><row><xmlcolumn><element><value</element>
.
Если ваш вопрос касается чего-то другого, вам придется правильно перефразировать его и правильно использовать термины.Не придумывайте новые термины, которые никто не понимает, кроме вас.
Обновление :
Если вы вставляете значения XML в столбец, вам не нужно делатьвообще ничего.Клиентские библиотеки знают, как правильно обрабатывать экранирование. Пока вы правильно пишете свой код .Помните, XML является НЕ строкой и никогда не должен рассматриваться как единое целое.Если вы пишете XML на своем клиенте, используйте соответствующую библиотеку XML ( XmlWriter , XML DOM , Linq to XML и т. Д.).при передаче XML в SQL Server используйте соответствующий тип: SqlXml .Хранимые процедуры должны использовать соответствующий тип параметра: XML .Когда вы читаете его, используйте соответствующий метод для чтения XML: GetSqlXml () .То же самое относится и к объявлению типа в одном из множества дизайнеров (LINQ to SQL, EF и т. Д.).В конечном итоге, никогда не требуется вручную экранировать символы XML.Если вы обнаружите, что делаете это, вы используете неправильный API и вам нужно вернуться к чертежной доске.
Хорошее начало чтения - Поддержка XML в Microsoft SQL Server 2005 .
И, наконец, для манипулирования XML, как вы описываете (обновите столбец XML таблицы A столбцом XML таблицы B), вы используете методы XML , в частности modify (...вставить ...) , и вы связываете столбец таблицы B внутри XQuery, используя sql:column
:
update A
set somecolumn.modify('insert {sql:column("B.othercolumn")} before somenode')
from A join B on ...;
В своем комментарии вы угрожаете XML как строкой икак я уже говорил, вам никогда не следует этого делать: строки и XML - это как вода и масло.