我想將@OBV的值插入到函式內的表中。實作它的正確方法是什么?
alter function CalculateOnBalanceVolume (
@operation varchar(3),
@volume money
)
returns char(4) as
begin
declare @prevOBV as money,
@OBV as money
set @prevOBV = (
select top 1 OnBalanceVolume
from OnBalanceVolume
order by EventTime desc
)
if (@operation = 'add') set @OBV = @prevOBV @volume
if (@operation = 'sub') set @OBV = @prevOBV - @volume
insert into OBVTable values (@OBV) // error
return @OBV
end;
uj5u.com熱心網友回復:
函式不能執行任何稱為副作用的操作,包括從表中插入、更新或洗掉,因此您不能為此使用函式。
要使用存盤程序,您可能需要:
create procedure CalculateOnBalanceVolume
@operation varchar(3),
@volume decimal(9,2),
@OBV decimal(9,2) output
as
select top (1) @Obv=OnBalanceVolume
case when @Operation='add' then @volume else -@volume end
from OnBalanceVolume
order by EventTime desc
insert into OBVTable values (@OBV)
go
然后呼叫該程序并獲取您的輸出值,例如:
declare @OBV decimal(9,2)
exec CalculateOnBalanceVolume 'add', 100, @OBV output
select @OBV as OutputValue
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/343722.html
上一篇:如果前面沒有相同字符,則替換字符
下一篇:如何將所有大寫字母修復為正常情況
