- - PR -
SQL Serverのストアドのパラメータに関数は渡せない?
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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は、なぜか関数の戻り値ではなく文字列として認識されているようです。 ストアドのパラメータに関数の戻り値を使用したいのですができません。 何か、対応方法をご存知の方はおられませんでしょうか? |
|
投稿日時: 2005-05-24 16:21
BOOKS ONLINE で調べたら、EXECUTE のパラメータは 値あるいは変数なので、
式は使えないようです。 したがって、式の結果を一旦変数に代入する必要があるかと思います。 |
|
投稿日時: 2005-05-24 18:09
こんにちは。
返答ありがとうございます。 >BOOKS ONLINE で調べたら、EXECUTE のパラメータは 値あるいは変数なので、 >式は使えないようです。 >したがって、式の結果を一旦変数に代入する必要があるかと思います。 そうでしたか。お騒がせしました。 でも、何でこんな作りになっているんでしょうね? 関数の戻値は、値であって式ではないと思うのですが・・・ |
|
投稿日時: 2005-05-25 01:05
解決になるかどうかわかりませんが・・・
CREATE PROCEDURE test @a varchar(50) AS execute('select ' + @a) で EXEC text 'GETDATE()' としてはどうでしょうか。 ただし、サーバ側で関数が評価されるため、サーバの時刻やホスト名になってしまいますが・・・ |
1
