変数の使い方について質問です。

フラミア
2014-03-12 16:48 1657 5

変数の使い方について質問です。

 

AccessからSQL Server2008に接続しています。

MSDE2000で、ストアドプロシージャを作成するときは

@ST INT = 1 AS SELECT .......

 

で実行できましたが、2008はエラー となります。

 

DECLARE @ST int = 1 SELECT ......

 

とすると、変数@STは宣言済みとエラーになりますが、なぜでしょうか?

 

ご存じの方がおられましたら、よろしくお願いします。

コメント

2014年 03月 12日 (18:59)
こんにちは。
イノ(inno)です。

DECLARE @ST int
SET @ST = 1

SELECT .......

上記のように変更してください。

まず変数@STをDECLAREでINT型に指定します。
その後SETで変数@STに値を設定します。
その後SELECTします。

これで問題なくできると思います。
フラミア 2014年 03月 12日 (20:01)
早速のご回答ありがとうございます。

早速下記のように記述しましたが、ADOエラー:構文又はアクセス違反 となります。
AS はなくても結果は同じでした。
なにかおかしいでしょうか?

CREATE PROCEDURE テーブル名
DECLARE @ST int
SET @ST = 1
AS
SELECT フィールド名 ....
2014年 03月 12日 (20:29)
こんにちは。
イノ(inno)です。

ストアドプロシージャの場合、
下記のように作成します。

CREATE PROCEDURE [dbo].[pTest]
@ST int= 1
AS
SELECT * FROM dbo.Test WHERE ST = @ST

上記のストアドプロシージャを実行する時は下記のように使います。

EXEC dbo.pTest 1
フラミア 2014年 03月 13日 (10:18)
イノさん、回答ありがとうございます。
実際のmsde時の記述は

CREATE PROCEDURE プロシージャー名
@ST INT =1
AS
SELECT 得意先コード, 得意先名, よみ
FROM dbo.[得意先マスタ]
WHERE 得意先コ―ド =@ST
RETURN

で、実行するフォーム上で入力パラメータに@ST INT =FORMS!TEST.FORM![得意先コード]
と指定しています。

このプロシージャで記述後保存しようとするとADOエラーとなります。記述外の問題でしょうか?
お忙しいところ恐縮ですがよろしくお願いします。
2014年 03月 13日 (18:27)
こんにちは。

フラミアさんが記述しましたプロシージャー。。

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を呼び方について再度調べてみて方がいいかと思います。