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

Откуда:
Сообщений: 77
Имеется две таблицы: Task и Task123 (импортирована из excel).
И там, и там есть столбец id.
В Task есть xml-столбец Data, в который мне необходимо импортировать в одно из полей (field[@id = 238]) значение столбца Provider при условии, что совпадают id двух таблиц.

Следующий код:
UPDATE Task
SET Data.modify('replace value of (data/field[@id = 238]/text())[1] with cast(Task123.Provider as string))')
where Task.Id=Task123.ID

выдает ошибку: Не удалось привязать составной идентификатор "Task123.ID".

Если слепить таблицы:
UPDATE Task
SET Data.modify('replace value of (data/field[@id = 238]/text())[1] with cast(Task123.Provider as string))')
FROM Task RIGHT JOIN Task123 ON Task.Id=Task123.ID
where Task.Id=Task123.ID

выдает ошибку: Ожидается XQuery [Task.Data.modify()]: "," или ")"
24 ноя 14, 05:46    [16894212]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из другой таблицы  [new]
Klemzig
Guest
Pim.,

Алиасы не забываем:
UPDATE t
SET Data.modify('replace value of (data/field[@id = 238]/text())[1] with sql:column("t1.Provider")')
FROM Task t inner join Task123 t1 ON t.Id=t1.ID;
24 ноя 14, 06:01    [16894215]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из другой таблицы  [new]
Pim.
Member

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

Работает, спасибо!
24 ноя 14, 06:17    [16894220]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из другой таблицы  [new]
Pim.
Member

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

А не подскажите, что делать, если атрибут @id = 238 есть не везде? Как его добавть в Data, если такого нет?
24 ноя 14, 06:23    [16894221]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из другой таблицы  [new]
Klemzig
Guest
Pim.,

+
declare @t table (
	Id int primary key,
	XData xml not null
);

declare @t2 table (
	Id int primary key,
	Value varchar(20) not null
);


insert into @t (Id, XData)
values
	(1, '<Root><Item Id="45">qwerty</Item><Item Id="238">ytrewq</Item><Item Id="445">asdzxc</Item></Root>'),
	(2, '<Root><Item Id="49">qwerty</Item><Item Id="238">ytrewq</Item><Item Id="445">asdzxc</Item></Root>');

insert into @t2 (Id, Value)
values
	(1, '123456'),
	(2, '123098');

select t.*, t2.Value
from @t t
	inner join @t2 t2 on t.Id = t2.Id;

update t set XData.modify('replace value of (/Root[1]/Item[@Id="45"]/text())[1] with sql:column("s.Value")')
from @t t
	inner join @t2 s on t.Id = s.Id
where t.XData.exist('/Root[1]/Item[@Id="45"]') = 1;

update t set XData.modify('insert <Item Id="45">{sql:column("s.Value")}</Item> as first into /Root[1]')
from @t t
	inner join @t2 s on t.Id = s.Id
where t.XData.exist('/Root[1]/Item[@Id="45"]') = 0;

select * from @t;
В один апдейт, насколько я понимаю, нельзя. Разве что с FLWOR заморачиваться, но... сомневаюсь.
24 ноя 14, 07:36    [16894245]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из другой таблицы  [new]
Pim.
Member

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

Спасибо, работает!
24 ноя 14, 07:53    [16894259]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить