Cómo declarar una variable de SQL Server y utilizarlo en el mismo procedimiento almacenado
-
04-10-2019 - |
Pregunta
Im tratando de obtener el valor de BrandID en una mesa y añadirlo a otra mesa. Pero no puedo conseguir que funcione. Alguien sabe hacerlo bien?
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
Solución
¿Qué está pasando mal con lo que tienes? ¿Qué error se puede conseguir, o qué resultado hacer o no se obtiene que no coincide con sus expectativas?
puedo ver los siguientes problemas con que la SP, que puede o no puede estar relacionado con su problema:
- Usted tiene una
)
extraña después de@BrandName
en suSELECT
(al final) - No está configurando
@CategoryID
o@BrandName
a cualquier cosa (que son variables locales, pero se hacen los valores no asigna a ellos)
Editar En respuesta a tu comentario: El error está diciendo que usted no ha declarado ninguna parámetros para el SP (y no lo ha hecho), pero se llama con parámetros. Sobre la base de su respuesta sobre @CategoryID
, supongo que quería que fuera un parámetro en lugar de una variable local. Prueba esto:
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
A continuación, llamaría a esto como esto:
EXEC AddBrand 'Gucci', 23
... suponiendo que el nombre de la marca fue 'Gucci' y la categoría ID fue de 23.
Otros consejos
En SQL 2012 (y tal vez ya en 2005), usted debe hacer esto:
EXEC AddBrand @BrandName = 'Gucci', @CategoryId = 23
Ninguno de los métodos anteriores trabajó para mí, así que lo pongo como lo hice
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