2010-05-08 11 views
24

Bir tabloda BrandID değerini almayı ve başka bir tabloya eklemeyi deniyorum. Ama işe yaramayacağım. Bunu nasıl yapacaklarını bilen var mı?SQL Server'da bir değişken bildirme ve aynı Depolanmış Prosedürde nasıl kullanılır

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 

cevap

24

Elinizde olanlarla ilgili sorun nedir? Ne tür bir hata elde edersiniz, ya da sonuçlarınız, beklentilerinize uymuyor mu?

I ya da problemle ilgili olabilir veya olmayabilir o SP ile aşağıdaki sorunları görebilirsiniz: Sen (sonunda) sizin SELECT içinde @BrandName sonra yabancı bir ) var

  • You' her yerde bir şey @CategoryID veya @BrandName kurmadığını yeniden (yerel değişkenler, ama siz onlara değerlerini atamazsanız)

Düzenleme Yorumunuza yanıt vermek: Hata, SP için parametresini bildirmediğinizi bildirir (ve siz yapmadıysanız), ancak bunu parametrelerle çağırdınız. @CategoryID ile ilgili cevabınıza dayanarak, yerel değişkenlerden ziyade bir parametre olmasını istediğinizi tahmin ediyorum. Bu deneyin:

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 

Sonra böyle bu çağırır:

EXEC AddBrand 'Gucci', 23 

... markası 'Gucci' ve kategori kimliği sql 2012'de 23.

+0

I Aşağıdaki hatayı alın: Prosedür AddBrand'ın parametresi yoktur ve argümanlar verilmiştir. yazım hatası için teşekkürler: Ben ")" Sana Categoryıd hakkında demek istediğini biliyorum, ben SP'ye getirmek ve tblBrandinCategory – Nicklas

+1

@ispostback eklemek istiyorum benim aspx sayfasında bir değere yok düzeltildi düzeltmeleri. Hayır, '()' [CREATE PROCEDURE'] içindeki parametre bildirimleri etrafında kullanılmaz (https://docs.microsoft.com/en-us/sql/t-sql/statements/create-procedure-transact- sQL). –

1

oldu varsayarak (ve belki kadar geri 2005 gibi), bunu yapmalıdır:

EXEC AddBrand @BrandName = 'Gucci', @CategoryId = 23 
1
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 
İlgili konular