Допустим, в моей базе данных есть следующие два фрагмента XML
<!-- XML 1 -->
<pairs>
<item key="a">xml 1 a value</item>
<item key="b">xml 1 b value</item>
<item key="c">xml 1 c value</item>
</pairs>
<!-- XML 2 -->
<pairs>
<item key="c">xml 2 c value</item>
<item key="d">xml 2 d value</item>
<item key="e">xml 1 e value</item>
</pairs>
Эти данные хранятся в двух отдельных таблицах с использованием типа данных XML
, кроме того, этот столбец XML связан со схемой, которая описывает формат ожидаемого xml, например,
[PairData] [xml](CONTENT [foo].[Pairs]) NULL
Внутри хранимой процедуры / функции я хотел бы объединить эти две XML-структуры в следующее:
<pairs>
<item key="a">xml 1 a value</item>
<item key="b">xml 1 b value</item>
<item key="c">xml 2 c value</item>
<item key="d">xml 2 d value</item>
<item key="e">xml 2 e value</item>
</pairs>
Итак, из первого куска XML мы взяли элементы:
a, b
из второго куска XML мы взяли предметы:
c, d, e
Обратите внимание, что два фрагмента XML имеют общий элемент с ключом:
c
В этом сценарии значение из xml 2 должно использоваться в объединенном xml (исключая значение из xml 1). Другой случай - XML 1 или 2 может быть NULL, поэтому процесс слияния должен обрабатывать это и просто возвращать другой. Или оба могут иметь значение NULL, и в этом случае возвращается NULL.
Кроме того, в нашей текущей реализации мы возвращаем оба XML-документа из БД и выполняем слияние в коде. Однако мы бы предпочли, чтобы это слияние выполнялось в БД, так как несколько не связанных процессов вызывают этот процесс.