我試圖執行此標量函數內計算算術表達式,我嘗試了很多的方法來實現這一點,但我會被卡住如何在SQL標量函數
Create FUNCTION CalculateElementFunc()
RETURNS int
AS
BEGIN
DECLARE @ResultVar numeric(18,6)
DECLARE @eq nvarchar(MAX)
set @eq = '7.5/100*1258.236'
declare @expression nvarchar(max)
set @expression = @eq
declare @result int
declare @SQLString nvarchar(max)
Set @SQLString = N'Select @result = @expression'
exec sp_executesql @SQLString, N'@expression nvarchar(100)',
@expression,
@result = @result output
select @ResultVar = @result
if(@ResultVar <> ROUND(@ResultVar, 2 ,1))
set @ResultVar = cast(ROUND(@ResultVar, 2 ,1) + .01 as numeric(18,2))
RETURN @ResultVar
END
當我嘗試執行它
選擇dbo.CalculateElementFunc()
我得到這個錯誤
消息557,級別16,狀態2,行1個 只有等功能我擴展存儲過程可以在一個函數內執行。
請建議
T-SQL中的函數不能產生副作用。因此,您無法插入/更新或調用存儲過程。除非你自己實現表達式分析器(當然不是微不足道的),否則我認爲在純TSQL中這是不可能的。此外,表現會很糟糕。你也許可以使用CLR函數來做到這一點。 –
然後..什麼是評估算術表達式的SQL標量函數 – Mariam
正如我所說(也有人指出)如果表達式在設計時是未知的,並且您需要函數(而不是存儲過程),你唯一的選擇是CLR函數(或更好的是:不要在SQL中執行) –