
Problemas con Trigger y Procedimiento almacenado
Publicado por Eduardo Ramos (1 intervención) el 02/06/2016 23:10:13
Tengo un programa en C# que utiliza la siguiente base de datos:
CREATE DATABASE "La Plazita"
USE "La Plazita"
CREATE TABLE Categorias (
idCategoria int IDENTITY (1 , 1) NOT NULL PRIMARY KEY ,
nombreCategoria varchar (30) NOT NULL ,
descripcion varchar (40) NULL
)
CREATE TABLE Clientes (
idCliente int IDENTITY (100, 1) NOT NULL PRIMARY KEY ,
nombreCliente varchar (50) NOT NULL ,
nombreEmpresa varchar (40) NULL ,
direccion varchar (60) NULL ,
telefono varchar (15) NULL
)
CREATE TABLE Proveedores (
idProveedor int IDENTITY (1, 1) NOT NULL PRIMARY KEY ,
nombreProveedor varchar (40) NOT NULL ,
direccion varchar (60) NULL ,
telefono varchar (15) NULL
)
CREATE TABLE Ventas (
idVenta int IDENTITY (100, 1) NOT NULL PRIMARY KEY ,
fechaVenta datetime NOT NULL ,
idCliente int NOT NULL FOREIGN KEY REFERENCES Clientes(idCliente)
)
CREATE TABLE Productos (
idProducto int IDENTITY (1000 , 1) NOT NULL PRIMARY KEY ,
nombreProducto varchar (35) NOT NULL ,
descripcion varchar (50) NULL ,
cantidadPorUnidad varchar (25) NOT NULL ,
precioPorUnidad money NOT NULL ,
unidadesEnStock smallint NOT NULL ,
idProveedor int NOT NULL FOREIGN KEY REFERENCES Proveedores(idProveedor) ,
idCategoria int NOT NULL FOREIGN KEY REFERENCES Categorias (idCategoria),
CONSTRAINT CK_Productos_Precio CHECK (precioPorUnidad >= 0),
CONSTRAINT CK_Productos_Stock CHECK (unidadesEnStock >= 0)
)
CREATE TABLE DetalleVenta (
cantidadVendida int NOT NULL ,
idVenta int NOT NULL FOREIGN KEY REFERENCES Ventas (idVenta) ,
idProducto int NOT NULL FOREIGN KEY REFERENCES Productos (idProducto) ,
CONSTRAINT CK_DetalleVenta_Cantidad CHECK (cantidadVendida > 0)
)
El problema viene con esta parte del código:
CREATE PROCEDURE regresarVenta
@nombreCliente AS varchar,
@idVenta AS int,
@cantidadVendida AS int,
@nombreProducto AS varchar
AS
IF @nombreCliente IN (SELECT nombreCliente FROM Clientes)
AND @idVenta IN (SELECT idVenta FROM DetalleVenta)
BEGIN
DELETE FROM DetalleVenta where idVenta=@idVenta
END
ELSE
BEGIN
PRINT 'Alguno de los datos es incorrecto'
END
GO
CREATE TRIGGER aumentarStock
ON detalleVenta
FOR DELETE
AS
BEGIN
UPDATE p set p.unidadesEnStock = i.cantidadVendida + p.unidadesEnStock
FROM Productos p
INNER JOIN inserted i ON i.idProducto = p.idProducto
END
GO
Como se podrán dar cuenta, es un procedimiento almacenado para hacer devoluciones y un trigger que deberia aumentar el stock del inventario pero no cumplen con su funcion, si pudieran ayudarme se los agredeceria mucho (no se mucho de procedimientos almacenados y menos trigger).
Les adjunto la base de datos por si quieren checarla
CREATE DATABASE "La Plazita"
USE "La Plazita"
CREATE TABLE Categorias (
idCategoria int IDENTITY (1 , 1) NOT NULL PRIMARY KEY ,
nombreCategoria varchar (30) NOT NULL ,
descripcion varchar (40) NULL
)
CREATE TABLE Clientes (
idCliente int IDENTITY (100, 1) NOT NULL PRIMARY KEY ,
nombreCliente varchar (50) NOT NULL ,
nombreEmpresa varchar (40) NULL ,
direccion varchar (60) NULL ,
telefono varchar (15) NULL
)
CREATE TABLE Proveedores (
idProveedor int IDENTITY (1, 1) NOT NULL PRIMARY KEY ,
nombreProveedor varchar (40) NOT NULL ,
direccion varchar (60) NULL ,
telefono varchar (15) NULL
)
CREATE TABLE Ventas (
idVenta int IDENTITY (100, 1) NOT NULL PRIMARY KEY ,
fechaVenta datetime NOT NULL ,
idCliente int NOT NULL FOREIGN KEY REFERENCES Clientes(idCliente)
)
CREATE TABLE Productos (
idProducto int IDENTITY (1000 , 1) NOT NULL PRIMARY KEY ,
nombreProducto varchar (35) NOT NULL ,
descripcion varchar (50) NULL ,
cantidadPorUnidad varchar (25) NOT NULL ,
precioPorUnidad money NOT NULL ,
unidadesEnStock smallint NOT NULL ,
idProveedor int NOT NULL FOREIGN KEY REFERENCES Proveedores(idProveedor) ,
idCategoria int NOT NULL FOREIGN KEY REFERENCES Categorias (idCategoria),
CONSTRAINT CK_Productos_Precio CHECK (precioPorUnidad >= 0),
CONSTRAINT CK_Productos_Stock CHECK (unidadesEnStock >= 0)
)
CREATE TABLE DetalleVenta (
cantidadVendida int NOT NULL ,
idVenta int NOT NULL FOREIGN KEY REFERENCES Ventas (idVenta) ,
idProducto int NOT NULL FOREIGN KEY REFERENCES Productos (idProducto) ,
CONSTRAINT CK_DetalleVenta_Cantidad CHECK (cantidadVendida > 0)
)
El problema viene con esta parte del código:
CREATE PROCEDURE regresarVenta
@nombreCliente AS varchar,
@idVenta AS int,
@cantidadVendida AS int,
@nombreProducto AS varchar
AS
IF @nombreCliente IN (SELECT nombreCliente FROM Clientes)
AND @idVenta IN (SELECT idVenta FROM DetalleVenta)
BEGIN
DELETE FROM DetalleVenta where idVenta=@idVenta
END
ELSE
BEGIN
PRINT 'Alguno de los datos es incorrecto'
END
GO
CREATE TRIGGER aumentarStock
ON detalleVenta
FOR DELETE
AS
BEGIN
UPDATE p set p.unidadesEnStock = i.cantidadVendida + p.unidadesEnStock
FROM Productos p
INNER JOIN inserted i ON i.idProducto = p.idProducto
END
GO
Como se podrán dar cuenta, es un procedimiento almacenado para hacer devoluciones y un trigger que deberia aumentar el stock del inventario pero no cumplen con su funcion, si pudieran ayudarme se los agredeceria mucho (no se mucho de procedimientos almacenados y menos trigger).
Les adjunto la base de datos por si quieren checarla
- BD-La-Plazita.zip(5,7 KB)
Valora esta pregunta


0