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

Откуда:
Сообщений: 336
Приветствую ВСЕХ!
Подскажите как решить следующию задачу:
Есть функция (SQL) (2 параметра входных), возвращающая таблицу (1 строка 10 столбцов) .
Необходимо результат функции сохранить(UPDATE) в таблице.

Пример функции:
create function z
(
@a INT,
@b INT
)
RETURNS @res table (x1 FLOAT
,x2 FLOAT
,x3 FLOAT
,x4 FLOAT)

AS
BEGIN
insert into @res(x1,x2,x3,x4) values (1,2,3,4)
RETURN
END

Пример UPDATE
table (a int,b int,y1 FLOAT,y2 FLOAT,y3 FLOAT,y4 FLOAT)
UPDATE table SET z(a,b)as rr z1=rr.x1,z2=rr.x2,z3=rr.x3,z4=rr.x4
4 дек 14, 16:08    [16950631]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции для UPDATE  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
update t1 ... from dbo.fn(t1.a,t1.b,t1.c) where ...
4 дек 14, 16:23    [16950767]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции для UPDATE  [new]
Mixon
Member

Откуда:
Сообщений: 336
Владислав Колосов
update t1 ... from dbo.fn(t1.a,t1.b,t1.c) where ...


вот набросал пример:

declare @t table(id int IDENTITY(1,1),txt varchar(10), k1 int,k2 int)

--select * from @t

insert into @t(txt) values('z0')
insert into @t(txt) values('z1')
insert into @t(txt) values('z2')
insert into @t(txt) values('z3')
insert into @t(txt) values('z4')

select * from @t

update @t set k1=r.r1,k2=r.r2
from (select * from [ttt](как сюда передать @t.id) )as r

--from (select * from [ttt](@t.id) )as r не прокатывает, пишет не знает что такое @t
4 дек 14, 21:46    [16952542]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции для UPDATE  [new]
Mixon
Member

Откуда:
Сообщений: 336
код функции
CREATE FUNCTION ttt
(
@id int
)
RETURNS @res TABLE (r1 int,r2 int)
AS
begin
insert into @res(r1,r2) Values(@id,@id+2)

return
end
GO
4 дек 14, 21:47    [16952546]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции для UPDATE  [new]
OmgFail
Member

Откуда:
Сообщений: 4
Mixon
как сюда передать @t.id


Использовать CROSS APPLY
4 дек 14, 22:43    [16952718]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции для UPDATE  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
CREATE FUNCTION ttt (	@id int )
RETURNS TABLE
AS
return 
	select @id r1, @id+2 r2
GO

declare @t table(id int IDENTITY(1,1),txt varchar(10), k1 int,k2 int)
insert into @t(txt) values('z0'),('z1'),('z2'),('z3'),('z4')

update @t set k1=r.r1,k2=r.r2
from @t t
cross apply dbo.[ttt](t.id) as r

select * from @t
GO
5 дек 14, 11:54    [16954440]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить