Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обработка XML  [new]
hail_835
Guest
Есть две XML переменные
DECLARE 
	@xml	xml =	'<row ID="1569" ID2="1460" ID3="29421"/>',
	@chg	xml =	'<row ID="1559" ID2="1460" ID3="30843"/>'


select @xml, @chg

Подскажите пожалуйста как избавить переменную @chg от избыточности? К названию атрибутов завязываться нельзя, формируются динамически из разных таблиц. В результате нужно так:
<row ID3="30843"/>
1 ноя 11, 08:51    [11530392]     Ответить | Цитировать Сообщить модератору
 Re: Обработка XML  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
declare @chg	xml =	'<row ID="1559" ID2="1460" ID3="30843"/>'
select cast('<row ' + replace(parsename(replace(replace(cast(@chg as varchar(100)), ' ', '.'),'"','?'), 1),'?','"') as xml)
1 ноя 11, 09:16    [11530441]     Ответить | Цитировать Сообщить модератору
 Re: Обработка XML  [new]
hail_835
Guest
Knyazev Alexey
declare @chg	xml =	'<row ID="1559" ID2="1460" ID3="30843"/>'
select cast('<row ' + replace(parsename(replace(replace(cast(@chg as varchar(100)), ' ', '.'),'"','?'), 1),'?','"') as xml)

Это конечно работает но только в конкретном случае. Может я не совсем точно задал вопрос, нужно сравнить две XML переменные и только там где атрибуты тега <row/> различны выводить их в селекте, при этом количество атрибутов может меняться, т.е уже при таких значениях переменных:
DECLARE 
	@xml	xml =	'<row ID="1569" ID2="1460" ID3="29421" ID4="864"/>',
	@chg	xml =	'<row ID="1559" ID2="1460" ID3="29421" ID4="1053"/>'

select @xml, @chg
нужен такой результат:
<row ID4="1053"/>
Как я понимаю здесь наверно не обойтись без .query .modify .delete .value
1 ноя 11, 10:02    [11530641]     Ответить | Цитировать Сообщить модератору
 Re: Обработка XML  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
hail_835,

можно попробовать воспользоваться OPENXML:
DECLARE	@xml xml = '<row ID="1569" ID2="1460" ID3="29421"/>'
,	@chg xml = '<row ID="1559" ID2="1460" ID3="30843"/>'
,	@ixml int
,	@ichg int

EXEC sp_xml_preparedocument @ixml OUTPUT, @xml
EXEC sp_xml_preparedocument @ichg OUTPUT, @chg

SELECT *
FROM OPENXML (@ixml, '/row') A

SELECT *
FROM OPENXML (@ichg, '/row')

EXEC sp_xml_removedocument @ixml
EXEC sp_xml_removedocument @ichg
1 ноя 11, 10:55    [11530978]     Ответить | Цитировать Сообщить модератору
 Re: Обработка XML  [new]
hail_835
Guest
grigrim
hail_835,

можно попробовать воспользоваться OPENXML:
DECLARE	@xml xml = '<row ID="1569" ID2="1460" ID3="29421"/>'
,	@chg xml = '<row ID="1559" ID2="1460" ID3="30843"/>'
,	@ixml int
,	@ichg int

EXEC sp_xml_preparedocument @ixml OUTPUT, @xml
EXEC sp_xml_preparedocument @ichg OUTPUT, @chg

SELECT *
FROM OPENXML (@ixml, '/row') A

SELECT *
FROM OPENXML (@ichg, '/row')

EXEC sp_xml_removedocument @ixml
EXEC sp_xml_removedocument @ichg


Да спасибо большое как вариант. Буду пробовать.
1 ноя 11, 11:36    [11531350]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить