文字列として計算式がある列にあります。この式を計算した結果を使ってさらに計算しようとしています。EVal 関数のような機能を実現するにはどうすればいいでしょうか。
ストアドプロシージャのなかに次のようにすれば計算結果が出てきますが、ストアドファンクションの中ではテンポラリテーブルは作れない、とエラーになりました。
CREATE FUNCTION dbo.EVal(@express as nvarchar(200))
RETURNS Real
AS BEGIN
Declare @express as nvarchar(200)
, @Ans as real
Set @Command = 'Select ' + @express
Print @Command
CREATE TABLE #result (res real)
Insert Into #result(res) execute( @Command )
SELECT @Ans = res FROM #result
DROP TABLE #result
RETURN @Ans
END
テンポラリじゃなく、通常のテーブルを用意してみました。
Create table wrkEvalAns(Ans Real)
CREATE FUNCTION dbo.EVal(@express as nvarchar(200))
RETURNS Real
AS BEGIN
Declare @Ans as real, @Command as nVarchar(200)
Set @Command = 'Select ' + @express
Insert Into wrkEvalAns(Ans) execute( @Command )
SELECT @Ans = Ans FROM wrkEvalAns
RETURN @Ans
END
今度はparseは通りましたが、実行しようとすると Delete, Insert, Execute がInvalid とエラーに。Function としては作れない気がしてきました・・・。
送られる計算式のパターンは決まっているので、自分で式を分解して計算させるしかないかも。
コメント(1件)