- PR -

SQL Serverのストアドのパラメータに関数は渡せない?

1
投稿者投稿内容
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2005-05-24 15:26
こんにちは。
お世話になってます。

現在、SQL Server2000(sp3)を利用していますが、不可思議な現象に悩まされています。

まず、以下のストアドを作成します。

CREATE PROCEDURE test
@a varchar(50)
AS
select @a

次に、クエリアナライザで、以下のようにパラメータにシステム関数を渡します。

exec test GETDATE()
exec test HOST_NAME()

なぜか、以下のようなエラーがでます。

行 1: ')' の近くに無効な構文があります。

次に、ためしに括弧をはずして実行してみます。

exec test GETDATE
exec test HOST_NAME

実行できますが、結果として日付やホスト名を表示してほしいのですが、
GETDATEやHOST_NAMEは、なぜか関数の戻り値ではなく文字列として認識されているようです。

ストアドのパラメータに関数の戻り値を使用したいのですができません。
何か、対応方法をご存知の方はおられませんでしょうか?
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-05-24 16:21
BOOKS ONLINE で調べたら、EXECUTE のパラメータは 値あるいは変数なので、
式は使えないようです。

したがって、式の結果を一旦変数に代入する必要があるかと思います。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2005-05-24 18:09
こんにちは。
返答ありがとうございます。

>BOOKS ONLINE で調べたら、EXECUTE のパラメータは 値あるいは変数なので、
>式は使えないようです。
>したがって、式の結果を一旦変数に代入する必要があるかと思います。
そうでしたか。お騒がせしました。

でも、何でこんな作りになっているんでしょうね?
関数の戻値は、値であって式ではないと思うのですが・・・
ほげた
ベテラン
会議室デビュー日: 2002/05/08
投稿数: 67
お住まい・勤務地: なごやん
投稿日時: 2005-05-25 01:05
解決になるかどうかわかりませんが・・・

CREATE PROCEDURE test
@a varchar(50)
AS
execute('select ' + @a)



EXEC text 'GETDATE()'

としてはどうでしょうか。

ただし、サーバ側で関数が評価されるため、サーバの時刻やホスト名になってしまいますが・・・
1

スキルアップ/キャリアアップ(JOB@IT)