удаление корневых узлов из xmls в t-sql и объединение их - PullRequest
0 голосов
/ 27 сентября 2010

На самом деле я планирую лучший способ объединения XML-данных из базы данных SQL.

У меня есть таблица, которая содержит тип данных xml. Внутри находятся XML с похожими схемами. Я хотел объединить, скажем, два xmls, и они оба содержат корень <Custom></Custom> на обоих концах.

Каков наилучший способ сделать это?

Первый xml:

<Custom>
  <Data1>
   <ID>23423</ID>
   <Row1>value</Row1>
  </Data1>
  <Data1>
   <ID>57568</ID>
   <Row1>value</Row1>
  </Data1>
  <Data1>
   <ID>56756</ID>
   <Row1>value</Row1>
  </Data1>
 </Custom>

Второй xml:

<Custom>
  <Data1>
   <ID>6575</ID>
   <Row1>value</Row1>
  </Data1>
  <Data1>
   <ID>8345</ID>
   <Row1>value</Row1>
  </Data1>
  <Data1>
   <ID>5666</ID>
   <Row1>value</Row1>
  </Data1>
 </Custom>

Пожалуйста, не обращайте внимания на идентификаторы, реальные данные указаны в GUID, поэтому объединение не будет таким сложным.

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

звучит так, как будто вы говорите, что у меня есть два набора данных xml с одинаковыми корневыми узлами, но больше ничего (потенциально) общего?

поэтому, если вы хотите, чтобы система сравнивала различия между ними, я бы посмотрел на то, что доступно с точки зрения .net и с открытым исходным кодом. об этом думали раньше.

слияние - очень сложная вещь. если обе стороны имеют разные значения, как вы решаете, с кем «объединяться»? это не так просто, как вы думаете.

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

0 голосов
/ 07 июня 2013

Вот как я это сделаю:

DECLARE @First XML
SET @First = '<Custom>
  <Data1>
   <ID>23423</ID>
   <Row1>value</Row1>
  </Data1>
  <Data1>
   <ID>57568</ID>
   <Row1>value</Row1>
  </Data1>
  <Data1>
   <ID>56756</ID>
   <Row1>value</Row1>
  </Data1>
 </Custom>'

 DECLARE @Second XML
SET @Second = '<Custom>
  <Data1>
   <ID>6575</ID>
   <Row1>value</Row1>
  </Data1>
  <Data1>
   <ID>8345</ID>
   <Row1>value</Row1>
  </Data1>
  <Data1>
   <ID>5666</ID>
   <Row1>value</Row1>
  </Data1>
 </Custom>'

SET @First = (SELECT @First.query('/Custom/*'))
SET @Second = (SELECT @Second.query('/Custom/*'))

DECLARE @Merged XML
SET @Merged = (SELECT @First, @Second FOR XML RAW ('Custom'), ELEMENTS)

SELECT @Merged
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...