• ベストアンサー

SQL Server2008のスカラー変数

AccessからSQL Server2008に接続しています。 MSDE2000で、ストアドプロシージャを作成するときは @ST INT = 1 AS SELECT ....... で実行できましたが、2008はエラー となります。 DECLARE @ST int = 1 SELECT ...... とすると、変数@STは宣言済みとエラーになりますが、なぜでしょうか? ご存じの方がおられましたら、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • innoya
  • ベストアンサー率71% (10/14)
回答No.3

こんにちは。 nekopon299さんが記述しましたプロシージャー。。 CREATE PROCEDURE プロシージャー名 @ST INT =1 AS SELECT 得意先コード, 得意先名, よみ FROM dbo.[得意先マスタ] WHERE 得意先コ―ド =@ST RETURN このまま保存すれば保存ができると思います。 下記のようには保存できません。 CREATE PROCEDURE プロシージャー名 @ST INT =FORMS!TEST.FORM![得意先コード] AS SELECT 得意先コード, 得意先名, よみ FROM dbo.[得意先マスタ] WHERE 得意先コ―ド =@ST RETURN 上記の部分で「@ST INT =1」意味は@ST変数のDefault値として1を設定しますと意味です。 FORMS!TEST.FORM![得意先コード]値をあのプロシージャーに渡したい場合は方法が違います。 一旦、下記の方法でプロシージャーを正常に作成します。 CREATE PROCEDURE プロシージャー名 @ST INT =1 AS SELECT 得意先コード, 得意先名, よみ FROM dbo.[得意先マスタ] WHERE 得意先コ―ド =@ST RETURN その後、SQL SERVER Management Studioのクエリウィンドウから EXEC プロシージャー名 @ST = FORMS!TEST.FORM![得意先コード]値の数字を入力して実行してデータが表示されるかを先にご確認ください。 例えば EXEC プロシージャー名 @ST = 1 EXEC プロシージャー名 @ST = 2 のように実行します。 これで問題なかったらプロシージャーはもう大丈夫ですので、 プログラム側からSPを呼び方について再度調べてみて方がいいかと思います。

nekopon299
質問者

お礼

詳しく説明していただきありがとうございました。 お教えいただいた方法で試してみます。

その他の回答 (2)

  • innoya
  • ベストアンサー率71% (10/14)
回答No.2

こんにちは。 ストアドプロシージャの場合、 下記のように作成します。 CREATE PROCEDURE [dbo].[pTest] @ST int = 1 AS SELECT * FROM dbo.Test WHERE ST = @ST 上記のストアドプロシージャを実行する時は下記のように使います。 EXEC dbo.pTest 1

nekopon299
質問者

補足

イノさん、回答ありがとうございます。 実際のmsde時の記述は CREATE PROCEDURE プロシージャー名 @ST INT =1 AS SELECT 得意先コード, 得意先名, よみ FROM dbo.[得意先マスタ] WHERE 得意先コ―ド =@ST RETURN で、実行するフォーム上で入力パラメータに@ST INT =FORMS!TEST.FORM![得意先コード] と指定しています。 このプロシージャで記述後保存しようとするとADOエラーとなります。記述外の問題でしょうか? お忙しいところ恐縮ですがよろしくお願いします。

  • innoya
  • ベストアンサー率71% (10/14)
回答No.1

こんにちは。 DECLARE @ST int SET @ST = 1 SELECT ....... 上記のように変更してください。 まず変数@STをDECLAREでINT型に指定します。 その後SETで変数@STに値を設定します。 その後SELECTします。 これで問題なくできると思います。

nekopon299
質問者

補足

早速のご回答ありがとうございます。 早速下記のように記述しましたが、ADOエラー:構文又はアクセス違反 となります。 AS はなくても結果は同じでした。 なにかおかしいでしょうか? CREATE PROCEDURE テーブル名 DECLARE @ST int SET @ST = 1 AS SELECT フィールド名 ....

関連するQ&A