Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 обновление данных xml средствами tsql  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Всем добрый день!
Нужна помощь по работе с xml средствами SQL Server 2005.
Только начал осваивать эту тему, столкнулся с такой трудностью.

Есть данные представляющие рабочий лист эксель с полями, например так:
<ws>
<field xl_cell="a1" value="10"/>
<field xl_cell="a3" value="30"/>
</ws>
есть "шаблон" этой книги, например такой:
<ws>
<field xl_cell="a1"/>
<field xl_cell="a2"/>
<field xl_cell="a3"/>
</ws>
Необходимо "наложить" на шаблон реальные данные. Т.е. получить что-то вроде:
<field xl_cell="a1" value="10"/>
<field xl_cell="a2" value=""/>
<field xl_cell="a3" value="30"/>

Пока придумал только "разобрать" xml при помощи openxml в таблицы, сделать лефтджоин
...
from
	@Template tm
	left outer join @Data xl on tm.xl_cell = xl.xl_cell
for xml path ...
, и собрать заново в xml при помощи for xml.

Но наверняка есть способ проще.
Так же смотрел в сторону xQuery - но не понял как можно такое сделать.
1 дек 09, 14:24    [8002658]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных xml средствами tsql  [new]
iljy
Member

Откуда:
Сообщений: 8711
SomewhereSomehow,

declare @x1 xml = '<ws>
<field xl_cell="a1" value="10"/>
<field xl_cell="a3" value="30"/>
</ws>'
declare @x2 xml = 
'<ws>
<field xl_cell="a1"/>
<field xl_cell="a2"/>
<field xl_cell="a3"/>
</ws>'

declare @x xml

set @x = (
	select r2.value('@xl_cell','varchar(10)') '@xl_cell', r1.value('@value', 'int') '@value'
	from
		@x1.nodes('ws/*') t1(r1) right join @x2.nodes('ws/*') t2(r2)
			on r1.value('@xl_cell','varchar(10)') = r2.value('@xl_cell','varchar(10)')
	for xml path('field'), root('ws')
)

select @x
Сложно?
1 дек 09, 15:49    [8003353]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных xml средствами tsql  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Хотелось обойтись без for xml, т.к. структура сложнее чем в примере и геморно ее собирать, но всерно спасибо, буду пробовать...
1 дек 09, 17:51    [8004474]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных xml средствами tsql  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
SomewhereSomehow
Есть данные представляющие рабочий лист эксель с полями, например так:
<ws>
<field xl_cell="a1" value="10"/>
<field xl_cell="a3" value="30"/>
</ws>
есть "шаблон" этой книги, например такой:
<ws>
<field xl_cell="a1"/>
<field xl_cell="a2"/>
<field xl_cell="a3"/>
</ws>
Это канечно не моё дело, но:
1. что это за Excel?
2. вы храните данные в таком формате? А почему не реляционно и только на выходе генерить xml? А то так и сервак положить на лопатки можно.
2 дек 09, 13:40    [8008073]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить