SQL Server - triggers con condicionales

 
Vista:

triggers con condicionales

Publicado por Martin (4 intervenciones) el 18/11/2021 15:49:49
Buenos días, necesitaría de la ayuda de la comunidad, estoy tratando de realizar un trigger con un condicional, tengo una tabla que se llama Productos, en la cual tiene los campos idprov int -modelo varchar - descrip varchar - venta bool; y la tabla Ventas la cuan tiene los campo idventa int - idprod int.
El trigger debería la insercion del idprod de la tabla producto a la tabla ventas siempre y cuando en el campo venta de la tabla producto indique que es un producto de venta, logre hacer que lo realice pero me lo copia 3 veces al registro, paso scrip del trigger

-------------------------------------------------------------------------------------------
create trigger tr_IngresoProducto
on Productos for insert
as
set nocount on
INSERT INTO Ventas (idprod6)
SELECT IdProd FROM Productos WHERE Venta LIKE '1%'
go
-------------------------------------------------------------------------------------------

Desde ya muchas gracias por la ayuda que se me pueda brindar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

triggers con condicionales

Publicado por anonimo (4 intervenciones) el 18/11/2021 16:28:34
Ojo con ese Like y más aún con el simbolo de porcentaje

Así como está, le toma todos los ID que comiencen por 1, luego si usted tiene un Id = 1, 10, 100, 1025, se los coge todos

Eso no debería tener ese like debería ser Where IdProd = XXX

Es de esperar y suponer que cada producto tiene un ID único, y así solo toma el que realmente es
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

triggers con condicionales

Publicado por Martin (4 intervenciones) el 18/11/2021 21:54:41
Buenas tardes, probé la modificación que me indico, el ingreso es del idprod en la tabla ventas, siempre y cuando en la columna venta sea true o 1 "la cual es BOOLEAN", ingresa solo los que en la columna venta son para venta pero si ingreso 5 registros de venta en la tabla productos, en la tabla ventas me ingresa quince productos el cual se replica 5 veces el segundo 4, así sucesivamente hasta que llega al ultimo que si lo ingresa una sola vez, habría alguna manera de poder corregirlo para que el producto solo ingrese una sola vez en la tabla ventas y no se repita tantas veces como registros ingresen en la tabla ventas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

triggers con condicionales

Publicado por anonimo (4 intervenciones) el 18/11/2021 22:25:51
Martín.

Ignoro como tengas planteado tu modelo, y me queda difícil orientarte de forma adecuada.

Pero en cualquier sistema de ventas, tendrá que haber una estructura donde se gestione esa venta que necesariamente está relacionada a un cliente, y debe haber un detalle de venta, donde se detallan absolutamente todos los id de productos involucrados en dicha venta, y poder calcular su costo total, con base en la cantidad adquirida.

Yo supondría que tu modelo debe tener una venta así:

Tabla: Venta
Venta_ID
Fecha
Cliente_ID

Tabla: Detalle_Venta
Detalle_Venta_ID
Venta_ID
Producto_ID
Cantidad

Luego es apenas obvio que en ese detalle queden varios Id de producto, pero solo una vez es decir si compran 10 jabones por decir algo, el código del jabón aparecerá solo una vez con la cantidad = 10, suponiendo que el código del jabón marca XXX fuese 757

En el detalle de la venta debería aparecer 757 y 10 para código y cantidad respectivamente.

De cualquier forma si quieres publicas tu MER y te podría orientar mejor, porque ignoro como lo tengas planteado para ver si si está adecuadamente normalizado, no sea que el problema sea por ahí.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

triggers con condicionales

Publicado por Martin (4 intervenciones) el 18/11/2021 23:05:35
Hola, si las tablas están normalizadas de esa manera, la tabla ventas que que puse es para la consulta de precios de algunos productos que se venden, el resto de los productos son de uso interno.
Ejemplo:
tengo un producto que es LBE-5AC-Gen2, es una antena parrilla que no se vende en la tabla productos, y tengo un router TL-WR820 que es uno de los pocos productos que si vendemos, para lo cual en la tabla productos no puse un campo con el nombre "VALOR", ya que la gran mayoría no se venden, entonces cree otra tabla en la cual tiene el siguiente formato para los productos que si se venden

--------------------------------------------------------------------------------------------------------------------------------------
esquema tabla ventas

create table Ventas
(
IdVenta int identity (1,1) not null,
idprod6 int,
VCompra money,
VDolar money,
VGanancia money,
VVenta money,

constraint pk_Vent primary key (IdVenta),
constraint fk_Prodd foreign key (IdProd6) references Productos (IdProd)
)
go

--------------------------------------------------------------------------------------------------------------------------------------

esquema de tabla productos

create table Productos
(
IdProd int identity (1,1) not null,
ISBN varchar (20) unique not null,
Mod_Prod Varchar (40) unique not null,
Descr_Prod Varchar (250),
Mar_Prod varchar (20),
IdRub1 int not null,
CantMin int default (0),
Venta bit default (0),

constraint pk_Prod primary key (IdProd),
constraint fk_Rub1 foreign key (IdRub1) references Rubros (IdRub),
)
go
--------------------------------------------------------------------------------------------------------------------------------------

lo arme de esta manera para poder dar un acceso solo a la tabla ventas para que puedan obtener el valor de venta, ya que mi sector es de stock y el sistema me lo estoy armando a mi medida, por eso necesitaría si me pueden ayudar a que cada vez que ingrese un producto que sea para venta se me cargue en la tabla ventas para que tenga los valores correspondientes del valor del mismo

se que puede ser algo medio rebuscado, pero desde ya agradezco mucho su ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

triggers con condicionales

Publicado por anonimo (4 intervenciones) el 18/11/2021 23:48:00
Pues a simple vista se ve bien hasta cierto punto, pero no veo una categoría que me permita clasificar y categorizar valga la redundancia el producto, tampoco veo una columna llamada precio de venta y precio de compra, son necesarias para poder saber que le estoy ganando yo a un producto, a como lo compro y en cuanto lo vendo, y poder establecer el margen de utilidad.

Debería existir una estructura llamada categorías y llevar el Categoria_ID a la tabla de productos para saber ese producto de que grupo o categoría es, y saber que una Camisa hace parte de la categoría: Vestuario Masculino por ejemplo.

Lo que creo es que tu modelo no tiene una correcta relación entre la venta y el detalle de esa venta, porque ni siquiera existe. Ya te había dicho que en la Venta se registran las cosas macro, es decir la fecha en que se realiza, el cliente que la hace, el tipo de pago y otros atributos muy propios de una venta

Luego viene el detalle de la venta que no la veo por ahora en tu modelo, donde se registran los id del producto con sus cantidades algo así

Detalle_Venta_ID, Venta_ID, Producto_ID, Cantidad
1, 57, 123, 10
2, 57, 456, 8

La primer columna es el ID del detalle (1 y 2)
La segunda es el ID de la venta y que debe existir en la tabla Venta (57), se repite porque estamos adquiriendo dos productos, suponiendo que 123 es Camisa y 456 es Pantalón, que indica que se adquirieron 10 camisas y 8 pantalones.

A la hora de calcular el costo total, se haría Join a Producto para extraer el precio del producto implicado, y multiplicarle por la cantidad especificada en ese detalle, en este caso el precio de la camisa multiplicado por 10 y el de pantalón por 8

Yo que te recomiendo, para evitar tantas idas a la BD a registrar ese detalle, le pases un string delimitado por comas y así invocas el procedimiento de grabado solo una vez, pues de lógica si yo compro 20 productos en una venta debo ir a grabar 20 veces en el detalle, para evitar eso, se le pasa un string que haga las veces de array, y allá en el procedure lo tratas con STRING_SPLIT, y procesas todo en una sola ida.

Es una idea, lo puedes hacer de muchas más. Pero solo muestras la estructura de tu tabla de productos y venta, lo que se requiere es el Modelo Entidad Relación y saber como tienes relacionadas tus tablas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

triggers con condicionales

Publicado por Martin (4 intervenciones) el 19/11/2021 12:56:49
Buenos días, a la tabla que le puse ventas es realmente una tabla de precios, la tabla compras tiene a su vez una tabla que se llama DCompras, para ingresar lo que se adquiere, también tengo una tabla de ventasClientes la cual tiene el el detalle de la venta y se llama DVentClien, esta tabla ventas seria el listado de precios de los productos que se venden, por eso necesitaría ingresar solo los productos que si vendemos pero no los de uso interno ya que estos últimos son de mayor cantidad que los que se venden.
Necesitaría poder hacer esto ya que usamos una planilla excel compartida en la nube, y muy seguidamente tengo que verificar que no hayan modificado nada en ella, por eso quiero armar esta base de datos con esta tabla.

desde ya muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

triggers con condicionales

Publicado por anonimo (4 intervenciones) el 19/11/2021 13:21:56
Tienes una mala percepción de los atributos en tus entidades.

Un precio es un atributo que le pertenece al Producto, más no a la venta.

Si quieres me escribes a [email protected] y ahí te indico mi WhatsApp, para acabar de enderezar ese torcido camino que tienes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar