2010-09-28 3 views
0

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

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

строке 1, колонка C:

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

Row 2, Колонка C:

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

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

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

ответ

1

Можете ли вы квалифицировать, что означает «отличный 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; 
+0

Спасибо за вопрос, на самом деле есть небольшой разница между XML LOB. Я обновил свой оригинальный пост. Благодарю. – Snowy