Различаются ли данные на SQL Server XML? - PullRequest
0 голосов
/ 28 сентября 2010

У меня есть автоматизированный процесс, который вставляет документ XML в таблицу SQL Server 2008, столбец имеет тип XML.Дублированных данных много, интересно, кто-нибудь может порекомендовать хороший способ удаления нечетких значений на основе столбца XML?Таблица содержит тысячи строк, и каждый XML-документ имеет размер около 70 тыс.

Каждый XML-документ выглядит одинаково, за исключением одного значения элемента, например:

Строка 1, столбец C:

<?xml version="1.0"?><a><b/><c>2010.09.28T10:10:00</c></a>

Строка 2, столбец C:

<?xml version="1.0"?><a><b/><c>2010.09.29T10:10:00</c></a>

Я хочу сделать вид, что значение игнорируется, когда дело доходит до различий.Если все остальное равно, то я хочу считать документы одинаковыми.Если какой-либо другой элемент отличается, документы будут считаться другими.

Спасибо за все идеи.

1 Ответ

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

Можете ли вы уточнить, что для вас означает «отдельный XML»? Например, в чем разница между:

  • <a><b/></a>
  • <?xml version="1.0"?><a><b/></a>
  • <a xmlns:xhtml="http://www.w3.org/1999/xhtml"><b/></a>
  • <a><b xsi:nil="true" /></a>
  • <a><b></b></a>
  • <?xml version="1.0" encoding="UTF-8"?><a><b/></a>
  • <?xml version="1.0" encoding="UTF-16"?><a><b></b></a>

Как вы думаете, сколько существует "отдельных" XML-файлов?

Обновлено

Если ваш XML выглядит следующим образом: <?xml version="1.0"?><a><b/><c>2010.09.29T10:10:00</c></a>, вы можете спроецировать элемент, который различает поля и запрос в этой проекции:

with cte_x as (
  select xmlcolumn.value(N'(//a/c)[1]', N'DATETIME') as xml_date_a_c,
   ...
  from table
),
cte_rank as (
  select row_number() over (partition by xml_date_a_c order by ...) as rn
  from cte_x)
delete from cte_rank
  where rn > 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...