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

Откуда: Восточнее Урала
Сообщений: 53
Добрый вечер!

Есть функция, которая должная вернуть таблицу с случайными записями и пометить их как занятые:

ALTER FUNCTION dbo.GetBillsToReserve (
@SessionId UNIQUEIDEntifier,
@HolderId INT,
@Count int,
@BillValue int
)
RETURNS @Bills TABLE (Negotiation_Id int,
FullBillNumber varchar(8)
)
AS
BEGIN
insert into @Bills
select top(@Count) vn.Negotiation_Id, vn.FullVekselNumber from
vNegotiationsAll vn where vn.Holder_Id=@HolderId and vn.Veksel_Value=@BillValue
and vn.Session_Id is null
order by dbo.i_now()

update N set N.Session_Id=@SessionId
from Negotiations as N
inner join @Bills on @Bills.Negotiation_Id=N.Negotiation_Id

return;
END


На последний update ругается - мол надо объявить @Bills как скалярную величину.
При этом, update, delete непосредственно к @Bills, работают без проблем
1 сен 16, 21:57    [19619211]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с результирующей таблицей в Функции  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1451
AlexSYSka,

в табличной функции вы можете использовать операторы преобразования только табличной переменной определенной для возврата набора данных.

ALTER FUNCTION dbo.GetBillsToReserve (
@SessionId UNIQUEIDEntifier,
@HolderId INT,
@Count int,
@BillValue int
)
RETURNS @Bills TABLE (Negotiation_Id int,
FullBillNumber varchar(8)
)
AS
BEGIN
insert into @Bills
select top(@Count) vn.Negotiation_Id, vn.FullVekselNumber from 
vNegotiationsAll vn where vn.Holder_Id=@HolderId and vn.Veksel_Value=@BillValue
and vn.Session_Id is null
order by dbo.i_now()
return;
END
GO


update N
    set N.Session_Id=@SessionId 
from Negotiations as N
     inner join dbo.GetBillsToReserve f on f.Negotiation_Id = N.Negotiation_ID
1 сен 16, 22:01    [19619224]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с результирующей таблицей в Функции  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1451
оп чот я ступил..


declare 
@SessionId UNIQUEIDEntifier,
@HolderId INT,
@Count int,
@BillValue int

set @SessionID = NEWID()
set @HolderId = 1
set @Count = 10
set BillValue = 1

update N
    set Session_Id= @SessionId 
from Negotiations as N
     cross apply dbo.GetBillsToReserve(@SessionID, @GolderId, @Count, @BillValue) f
where N.Negotiation_Id = f.Negotiation_Id
1 сен 16, 22:05    [19619235]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с результирующей таблицей в Функции  [new]
AlexSYSka
Member

Откуда: Восточнее Урала
Сообщений: 53
Спасибо!
1 сен 16, 22:22    [19619274]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить