こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL Server2008のスカラー変数

AccessからSQL Server2008に接続しています。
MSDE2000で、ストアドプロシージャを作成するときは
@ST INT = 1 AS SELECT .......

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

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

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

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

投稿日時 - 2013-12-16 12:05:47

QNo.8388463

困ってます

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

こんにちは。

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

投稿日時 - 2013-12-17 16:31:18

お礼

詳しく説明していただきありがとうございました。

お教えいただいた方法で試してみます。

投稿日時 - 2013-12-25 11:33:16

ANo.3

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.2

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


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

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

EXEC dbo.pTest 1

投稿日時 - 2013-12-16 15:02:47

補足

イノさん、回答ありがとうございます。
実際のmsde時の記述は

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

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

このプロシージャで記述後保存しようとするとADOエラーとなります。記述外の問題でしょうか?
お忙しいところ恐縮ですがよろしくお願いします。

投稿日時 - 2013-12-17 11:53:11

ANo.1

こんにちは。

DECLARE @ST int
SET @ST = 1

SELECT .......

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

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

これで問題なくできると思います。

投稿日時 - 2013-12-16 12:28:20

補足

早速のご回答ありがとうございます。

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

CREATE PROCEDURE テーブル名
DECLARE @ST int
SET @ST = 1
AS
SELECT フィールド名 ....

投稿日時 - 2013-12-16 13:22:51

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-