SQL Server2000(TSQL)で質問です。

文字列として計算式がある列にあります。この式を計算した結果を使ってさらに計算しようとしています。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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/05/31 10:20:05
id:frkw2004

テンポラリじゃなく、通常のテーブルを用意してみました。

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)

  • Delete from wrkEvalAns

Set @Command = 'Select ' + @express

Insert Into wrkEvalAns(Ans) execute( @Command )

SELECT @Ans = Ans FROM wrkEvalAns

RETURN @Ans

END

今度はparseは通りましたが、実行しようとすると Delete, Insert, Execute がInvalid とエラーに。Function としては作れない気がしてきました・・・。

送られる計算式のパターンは決まっているので、自分で式を分解して計算させるしかないかも。

回答0件)

回答はまだありません

  • id:taknt
    ストアドファンクションの中ではテンポラリテーブルは作れないのは、テンポラリテーブルの作成が どうやってもダメということ?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません