Insertead OF

05/12/2003 - 16:37 por Julio | 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.

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

He probado con trigger pero no me sale.

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 similare

Leer las respuestas

#6 Julio rodriguez
06/12/2003 - 00:13 | Informe spam
Si es de la OrdenDeCompra a la que le quiero hacer el update lo que sucede
es que lo tenia mal especificado.
"ulises" wrote in message
news:048b01c3bb74$63218f10$
Sí pero la sentencia INSERT no sabe a cual de los tres
campos aplicar los dos campos que estas leyendo, en el
caso que la fecha ya tiene un DEFAULT tendrias que
especificar los campos que estás insertando.

INSERT INTO tabla ( campo1, campo2 ) SELECT ...

Pero me sigue quedando la duda, ya que este trigger
INSTEAD OF INSERT es en la tabla OrdenDeCompra y por lo
tanto le tienes que indicar que se llene esta tabla y no
la de OrdenCancelada.

Saludos,
Ulises

Lo que pasa es que la fecha la paso de manera automatica


Getdate ()
"ulises" wrote in message
news:011a01c3bb69$eec872a0$
Según veo tu tabla OrdenCancelada tiene tres campos y solo
le estás pasando dos, falta la fecha; pero en todo caso
creo que la idea es insertarlo en la tabla OrdenDeCompra
no en la tabla OrdenCancelada.

Saludos,
Ulises
Respuesta Responder a este mensaje
#7 Julio
06/12/2003 - 00:54 | Informe spam
Lo probe de la siquiente manera

CREATE TRIGGER Ordencancelada1 ON ordendecompra INSTEAD OF INSERT
AS
IF EXISTS (SELECT ordennumero FROM ordencancelada WHERE ordennumero IN (
SELECT ordennumero FROM inserted ) )
RAISERROR ('Esta orden fue cancelada.',16,1)
ELSE
INSERT INTO ordendecompra SELECT (ordennumero,RequisicionNumero) FROM
inserted

error:
Server: Msg 170, Level 15, State 1, Procedure Ordencancelada1, Line 7
Line 7: Incorrect syntax near ','.









"Julio rodriguez" wrote in message
news:
Si es de la OrdenDeCompra a la que le quiero hacer el update lo que sucede
es que lo tenia mal especificado.
"ulises" wrote in message
news:048b01c3bb74$63218f10$
Sí pero la sentencia INSERT no sabe a cual de los tres
campos aplicar los dos campos que estas leyendo, en el
caso que la fecha ya tiene un DEFAULT tendrias que
especificar los campos que estás insertando.

INSERT INTO tabla ( campo1, campo2 ) SELECT ...

Pero me sigue quedando la duda, ya que este trigger
INSTEAD OF INSERT es en la tabla OrdenDeCompra y por lo
tanto le tienes que indicar que se llene esta tabla y no
la de OrdenCancelada.

Saludos,
Ulises

>Lo que pasa es que la fecha la paso de manera automatica
Getdate ()
>"ulises" wrote in message
>news:011a01c3bb69$eec872a0$
>Según veo tu tabla OrdenCancelada tiene tres campos y solo
>le estás pasando dos, falta la fecha; pero en todo caso
>creo que la idea es insertarlo en la tabla OrdenDeCompra
>no en la tabla OrdenCancelada.
>
>Saludos,
>Ulises


Respuesta Responder a este mensaje
#8 ulises
06/12/2003 - 01:36 | Informe spam
Modificalo de ls siguiente manera :

CREATE TRIGGER tr_insertarordendecompra ON ordendecompra
INSTEAD OF INSERT
AS
IF EXISTS (SELECT ordennumero FROM ordencancelada WHERE ordennumero IN
( SELECT ordennumero FROM inserted ) )
RAISERROR ('Esta orden fue cancelada.',16,1)
ELSE
INSERT INTO ordendecompra SELECT * FROM inserted

Saludos,
Ulises

On Fri, 5 Dec 2003 19:54:05 -0400, "Julio"
wrote:

Lo probe de la siquiente manera

CREATE TRIGGER Ordencancelada1 ON ordendecompra INSTEAD OF INSERT
AS
IF EXISTS (SELECT ordennumero FROM ordencancelada WHERE ordennumero IN (
SELECT ordennumero FROM inserted ) )
RAISERROR ('Esta orden fue cancelada.',16,1)
ELSE
INSERT INTO ordendecompra SELECT (ordennumero,RequisicionNumero) FROM
inserted

error:
Server: Msg 170, Level 15, State 1, Procedure Ordencancelada1, Line 7
Line 7: Incorrect syntax near ','.

Respuesta Responder a este mensaje
#9 Julio
06/12/2003 - 14:40 | Informe spam
Gracias ulises por el seguimiento de la ayuda que me esta dando, Ahora
cuando lo corro me da el siguiente mensaje:

Server: Msg 8101, Level 16, State 1, Procedure tr_insertarordendecompra,
Line 8
An explicit value for the identity column in table 'ordendecompra' can only
be specified when a column list is used and IDENTITY_INSERT is ON.






"ulises" wrote in message
news:
Modificalo de ls siguiente manera :

CREATE TRIGGER tr_insertarordendecompra ON ordendecompra
INSTEAD OF INSERT
AS
IF EXISTS (SELECT ordennumero FROM ordencancelada WHERE ordennumero IN
( SELECT ordennumero FROM inserted ) )
RAISERROR ('Esta orden fue cancelada.',16,1)
ELSE
INSERT INTO ordendecompra SELECT * FROM inserted

Saludos,
Ulises

On Fri, 5 Dec 2003 19:54:05 -0400, "Julio"
wrote:

>Lo probe de la siquiente manera
>
>CREATE TRIGGER Ordencancelada1 ON ordendecompra INSTEAD OF INSERT
>AS
>IF EXISTS (SELECT ordennumero FROM ordencancelada WHERE ordennumero IN (
>SELECT ordennumero FROM inserted ) )
>RAISERROR ('Esta orden fue cancelada.',16,1)
>ELSE
>INSERT INTO ordendecompra SELECT (ordennumero,RequisicionNumero) FROM
>inserted
>
>error:
>Server: Msg 170, Level 15, State 1, Procedure Ordencancelada1, Line 7
>Line 7: Incorrect syntax near ','.
>

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida