web-dev-qa-db-ja.com

SQL Serverで変数を宣言し、同じストアドプロシージャで使用する方法

1つのテーブルでBrandIDから値を取得し、別のテーブルに追加しようとしています。しかし、私はそれを動作させることができません。誰でも正しい方法を知っていますか?

CREATE PROCEDURE AddBrand
AS

DECLARE 
@BrandName nvarchar(50),
@CategoryID int,
@BrandID int

SELECT @BrandID = BrandID FROM tblBrand 
WHERE BrandName = @BrandName

INSERT INTO tblBrandinCategory (CategoryID, BrandID) 
       VALUES (@CategoryID, @BrandID) 

RETURN
42
Nicklas

あなたが持っているものは何が悪いのですか?どのようなエラーが発生しますか、またはどのような結果が得られるか、または得られず、期待と一致しませんか?

そのSPには次の問題がありますが、これは問題に関連する場合と関連しない場合があります。

  • SELECT)の後に余分な@BrandNameがあります(最後に)
  • @CategoryIDまたは@BrandNameをどこにも設定していません(ローカル変数ですが、値を割り当てません)

編集コメントへの応答:エラーは、SPに対してparametersを宣言していないことを示しています(まだ宣言していない)。ただし、パラメータを使用して呼び出しました。 @CategoryIDについての回答に基づいて、ローカル変数ではなくパラメーターにすることを望んでいると思います。これを試して:

CREATE PROCEDURE AddBrand
   @BrandName nvarchar(50),
   @CategoryID int
AS
BEGIN
   DECLARE @BrandID int

   SELECT @BrandID = BrandID FROM tblBrand WHERE BrandName = @BrandName

   INSERT INTO tblBrandinCategory (CategoryID, BrandID) VALUES (@CategoryID, @BrandID)
END

次に、これを次のように呼び出します。

EXEC AddBrand 'Gucci', 23

...ブランド名が「グッチ」で、カテゴリIDが23であると仮定します。

43
T.J. Crowder

上記の方法はどれも役に立たなかったので、私がやった方法を投稿しています

DELIMITER $$
CREATE PROCEDURE AddBrand()
BEGIN 

DECLARE BrandName varchar(50);
DECLARE CategoryID,BrandID  int;
SELECT BrandID = BrandID FROM tblBrand 
WHERE BrandName = BrandName;

INSERT INTO tblBrandinCategory (CategoryID, BrandID) 
       VALUES (CategoryID, BrandID);
END$$
1
PrJ
CREATE PROCEDURE AddBrand
@BrandName nvarchar(50) = null,
@CategoryID int = null
AS    
BEGIN

DECLARE @BrandID int = null
SELECT @BrandID = BrandID FROM tblBrand 
WHERE BrandName = @BrandName

INSERT INTO tblBrandinCategory (CategoryID, BrandID) 
       VALUES (@CategoryID, @BrandID)

END

EXEC AddBrand @BrandName = 'BMW', @CategoryId = 1
1
Johnny

SQL 2012(およびおそらく2005年まで)では、これを行う必要があります。

EXEC AddBrand @BrandName = 'Gucci', @CategoryId = 23
1
dave