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

...假设品牌名称为“Gucci”,类别 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 回答
1

在 sql 2012 中(可能早在 2005 年),您应该这样做:

EXEC AddBrand @BrandName = 'Gucci', @CategoryId = 23
于 2014-03-13T15:55:52.943 回答
1

以上方法都不适合我,所以我按照我的方式发布

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$$
于 2018-10-19T05:33:32.343 回答