Trigger

03/12/2003 - 02:56 por Julio rodriguez | Informe spam
Hola grupo

Tengo una tabla llamada 'ordendecompra' y otra llamada 'ordencancelada' lo
que sucede es que cuando se borra una odendecompra se copia en
ordencancelada.
Lo que quiero es que si vuelven a poner el mismo numero de orden, le de un
error ya que ese numero de orden fue cancelado.
Tengo un trigger que se dispara cuando borran el numero de orden y lo copia
en la tabla ordencancelada.

He probado con trigger como INSTEAD OF INSERT pero no me sale.


Tablas

Odendecompra
Compraid ordennumero requisicionnumero fecha
1 03-88 01-11 02/02/08


Ordencancelada
Ordennumero requisicionnumero fecha actual
03-88 01-11 28/03/2003

Quiero construir este trigger pero soy un novato todavia, haber si alguien
me ayuda ya que estoy inventando para ver si me sale pero nada.

create view ordenview
as
select ordendecompra.ordennumero as ordencompras,ordencancelada.ordennumero
as ordencancelada from ordendecompra inner join ordencancelada
on ordendecompra.ordennumero=ordencancelada.ordennumero
go
create trigger Error
on ordenview
instead of insert
as
if
select * from ordenview
where ordencompras=ordencancelada
begin
Raiserror ('Esta orden fue cancelada.',16,1)
rollback transaction
end
 

Leer las respuestas

#1 Javier Loria
03/12/2003 - 15:37 | Informe spam
Hola Julio:
En principio te recomendaria mas bien hacerlo al contrario.
a) Crea un unica tabla de OrdenesCompra que incluya tanto las activas
como las canceladas, agregando un columna con su status.
b) Crea una Vista para las OrdenesCompra Activas y otra para las
Canceladas con un simple WHERE EstaCancelada=0 o =1 dependiendo de la
condicion.
c) La llave Primaria evitara que se repitan numeros de compra.
d) El lugar de hacer un DELETE haces un
UPDATE OrdenesCompra
SET EstaCancelada=0
WHERE NumeroFactura345
e) Eventualmente necesitaras un INDICE basado
EstaCancelada-NumeroFactura, pero dependiento del uso podrias ser
EstaCancelada-Fecha-NumeroFactura o
EstaCancelada-Cliente-Fecha-NumeroFactura.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Julio rodriguez escribio:
Hola grupo

Tengo una tabla llamada 'ordendecompra' y otra llamada
'ordencancelada' lo que sucede es que cuando se borra una
odendecompra se copia en ordencancelada.
Lo que quiero es que si vuelven a poner el mismo numero de orden, le
de un error ya que ese numero de orden fue cancelado.
Tengo un trigger que se dispara cuando borran el numero de orden y lo
copia en la tabla ordencancelada.

He probado con trigger como INSTEAD OF INSERT pero no me sale.


Tablas

Odendecompra
Compraid ordennumero requisicionnumero fecha
1 03-88 01-11 02/02/08


Ordencancelada
Ordennumero requisicionnumero fecha actual
03-88 01-11 28/03/2003

Quiero construir este trigger pero soy un novato todavia, haber si
alguien me ayuda ya que estoy inventando para ver si me sale pero
nada.

create view ordenview
as
select ordendecompra.ordennumero as
ordencompras,ordencancelada.ordennumero as ordencancelada from
ordendecompra inner join ordencancelada
on ordendecompra.ordennumero=ordencancelada.ordennumero
go
create trigger Error
on ordenview
instead of insert
as
if
select * from ordenview
where ordencompras=ordencancelada
begin
Raiserror ('Esta orden fue cancelada.',16,1)
rollback transaction
end

Preguntas similares