كيفية إعلان متغير في خادم SQL واستخدامه في نفس الإجراء المخزن

StackOverflow https://stackoverflow.com/questions/2793379

سؤال

أنا أحاول الحصول على القيمة من 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
هل كانت مفيدة؟

المحلول

ما الخطأ في ما لديك؟ ما الخطأ الذي تحصل عليه ، أو ما هي النتيجة أو لا تحصل عليها لا تتطابق مع توقعاتك؟

أستطيع أن أرى المشكلات التالية مع ذلك SP ، والتي قد تتعلق أو لا تتعلق بمشكلتك:

  • لديك غريب ) بعد، بعدما @BrandName في الخاص بك SELECT (في نهايةالمطاف)
  • أنت لا تحدد @CategoryID أو @BrandName إلى أي شيء في أي مكان (هم متغيرات محلية ، لكنك لا تُحدد قيمًا لهم)

يحرر الرد على تعليقك: الخطأ يخبرك أنك لم تعلن أي شيء المعلمات بالنسبة إلى SP (ولم تفعل) ، لكنك وصفته بالمعلمات. بناء على ردكم حول @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

... على افتراض أن اسم العلامة التجارية كان "Gucci" وكان معرف الفئة 23.

نصائح أخرى

في SQL 2012 (وربما يعود إلى عام 2005) ، يجب عليك القيام بذلك:

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

لم تنجح أي من الطرق المذكورة أعلاه بالنسبة لي ، لذا فإنني أنشر الطريقة التي فعلت بها

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$$
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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top