49

あるテーブルの 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
4

4 に答える 4

53

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

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

コメントで、修正後)にエラーが発生すると述べました。

プロシージャ AddBrand にはパラメータがなく、引数が指定されました。

これは、SP のパラメーターを宣言していないが、パラメーターを指定して呼び出したことを示しています。に関するあなたの返信に基づいて@CategoryID、ローカル変数ではなくパラメーターにしたかったと思います。これを試して:

CREATE PROCEDURE AddBrand
   @BrandName nvarchar(50), -- These are the
   @CategoryID int          -- parameter declarations
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

またはこれ:

EXEC AddBrand @BrandName = 'Gucci', @CategoryID = 23

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

于 2010-05-08T08:14:42.980 に答える
2
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
于 2016-09-07T06:00:25.730 に答える