كيفية إعلان متغير في خادم SQL واستخدامه في نفس الإجراء المخزن
-
04-10-2019 - |
سؤال
أنا أحاول الحصول على القيمة من 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