Problema con Trigger al insertar registro

18/02/2005 - 01:16 por news.microsoft.com | Informe spam
Hola, no se que estoy haciendo mal pero tengo un trigger que esta colgado en
una tabla que lo que hace es insertar el mismo registro en otra, pero cuando
ingreso 2 registros seguidos, el trigger solo inserta el primero.

a la hora de insertar los 2 registros hago solamente 1 solo commit.

el codigo del trigger es este :

CREATE TRIGGER INS_DOC_EMITIDO ON dbo.DOC_EMITIDO
FOR INSERT
AS

if NOT exists (select * FROM SUC_DOC_EMITIDO, INSERTED
where SUC_DOC_EMITIDO.CCJ_IDENTIFICADOR = INSERTED.CCJ_IDENTIFICADOR
AND SUC_DOC_EMITIDO.CCJ_FEC_CAJA = INSERTED.CCJ_FEC_CAJA
AND SUC_DOC_EMITIDO.SCJ_ID_SESION = INSERTED.SCJ_ID_SESION
AND SUC_DOC_EMITIDO.MCJ_NUM_OPE_CAJA = INSERTED.MCJ_NUM_OPE_CAJA)
begin

INSERT SUC_DOC_EMITIDO
( CCJ_IDENTIFICADOR,
CCJ_FEC_CAJA,
SCJ_ID_SESION,
MCJ_NUM_OPE_CAJA,
DEM_IDENTIFICADOR,
DEM_TIPO,
DEM_IMPORTE_COMP,
DEM_ANTERIOR,
DEM_TIPO_ANTERIOR,
DEM_FEC_EMISION,
DEM_SITUACION,
dem_doc_aplicado,
DEM_IND_EXTORNO,
DEM_FECH_EXTORNO,
DEM_ID_USUARIO_EXT,
DEM_CORRELATIVO,
DEM_TIP_MOV_SUC,
DEM_FECHA_SUC,
DEM_IND_SUC )
SELECT CCJ_IDENTIFICADOR,
CCJ_FEC_CAJA,
SCJ_ID_SESION,
MCJ_NUM_OPE_CAJA,
DEM_IDENTIFICADOR,
DEM_TIPO,
DEM_IMPORTE_COMP,
DEM_ANTERIOR,
DEM_TIPO_ANTERIOR,
DEM_FEC_EMISION,
DEM_SITUACION,
dem_doc_aplicado,
DEM_IND_EXTORNO,
DEM_FECH_EXTORNO,
DEM_ID_USUARIO_EXT,
DEM_CORRELATIVO,
'I',
GETDATE(),
'02'

From INSERTED
end

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

gracias por la ayuda...
 

Leer las respuestas

#1 MAXI
18/02/2005 - 01:43 | Informe spam
Hola lo que estas haciendo mal es el IF EXITS ya que estas considerando un
solo registro :(

Porque no pones esto en un left join del select del insert y filtras por los
que son nulos en los campos de union, por ej:

CREATE TRIGGER INS_DOC_EMITIDO ON dbo.DOC_EMITIDO
FOR INSERT
AS

INSERT SUC_DOC_EMITIDO
( CCJ_IDENTIFICADOR,
CCJ_FEC_CAJA,
SCJ_ID_SESION,
MCJ_NUM_OPE_CAJA,
DEM_IDENTIFICADOR,
DEM_TIPO,
DEM_IMPORTE_COMP,
DEM_ANTERIOR,
DEM_TIPO_ANTERIOR,
DEM_FEC_EMISION,
DEM_SITUACION,
dem_doc_aplicado,
DEM_IND_EXTORNO,
DEM_FECH_EXTORNO,
DEM_ID_USUARIO_EXT,
DEM_CORRELATIVO,
DEM_TIP_MOV_SUC,
DEM_FECHA_SUC,
DEM_IND_SUC )
SELECT CCJ_IDENTIFICADOR,
CCJ_FEC_CAJA,
SCJ_ID_SESION,
MCJ_NUM_OPE_CAJA,
DEM_IDENTIFICADOR,
DEM_TIPO,
DEM_IMPORTE_COMP,
DEM_ANTERIOR,
DEM_TIPO_ANTERIOR,
DEM_FEC_EMISION,
DEM_SITUACION,
dem_doc_aplicado,
DEM_IND_EXTORNO,
DEM_FECH_EXTORNO,
DEM_ID_USUARIO_EXT,
DEM_CORRELATIVO,
'I',
GETDATE(),
'02'

From INSERTED LEFT JOIN SUC_DOC_EMITIDO ON

SUC_DOC_EMITIDO.CCJ_IDENTIFICADOR = INSERTED.CCJ_IDENTIFICADOR
AND SUC_DOC_EMITIDO.CCJ_FEC_CAJA = INSERTED.CCJ_FEC_CAJA
AND SUC_DOC_EMITIDO.SCJ_ID_SESION = INSERTED.SCJ_ID_SESION
AND SUC_DOC_EMITIDO.MCJ_NUM_OPE_CAJA = INSERTED.MCJ_NUM_OPE_CAJA

WHERE SUC_DOC_EMITIDO.CCJ_IDENTIFICADOR IS NULL AND
SUC_DOC_EMITIDO.CCJ_FEC_CAJA IS NULL
AND SUC_DOC_EMITIDO.SCJ_ID_SESION IS NULL
AND SUC_DOC_EMITIDO.MCJ_NUM_OPE_CAJA IS NULL



Suerte



Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:



"news.microsoft.com" escribió en el mensaje
news:%
Hola, no se que estoy haciendo mal pero tengo un trigger que esta colgado
en una tabla que lo que hace es insertar el mismo registro en otra, pero
cuando ingreso 2 registros seguidos, el trigger solo inserta el primero.

a la hora de insertar los 2 registros hago solamente 1 solo commit.

el codigo del trigger es este :

CREATE TRIGGER INS_DOC_EMITIDO ON dbo.DOC_EMITIDO
FOR INSERT
AS

if NOT exists (select * FROM SUC_DOC_EMITIDO, INSERTED
where SUC_DOC_EMITIDO.CCJ_IDENTIFICADOR = INSERTED.CCJ_IDENTIFICADOR
AND SUC_DOC_EMITIDO.CCJ_FEC_CAJA = INSERTED.CCJ_FEC_CAJA
AND SUC_DOC_EMITIDO.SCJ_ID_SESION = INSERTED.SCJ_ID_SESION
AND SUC_DOC_EMITIDO.MCJ_NUM_OPE_CAJA = INSERTED.MCJ_NUM_OPE_CAJA)
begin

INSERT SUC_DOC_EMITIDO
( CCJ_IDENTIFICADOR,
CCJ_FEC_CAJA,
SCJ_ID_SESION,
MCJ_NUM_OPE_CAJA,
DEM_IDENTIFICADOR,
DEM_TIPO,
DEM_IMPORTE_COMP,
DEM_ANTERIOR,
DEM_TIPO_ANTERIOR,
DEM_FEC_EMISION,
DEM_SITUACION,
dem_doc_aplicado,
DEM_IND_EXTORNO,
DEM_FECH_EXTORNO,
DEM_ID_USUARIO_EXT,
DEM_CORRELATIVO,
DEM_TIP_MOV_SUC,
DEM_FECHA_SUC,
DEM_IND_SUC )
SELECT CCJ_IDENTIFICADOR,
CCJ_FEC_CAJA,
SCJ_ID_SESION,
MCJ_NUM_OPE_CAJA,
DEM_IDENTIFICADOR,
DEM_TIPO,
DEM_IMPORTE_COMP,
DEM_ANTERIOR,
DEM_TIPO_ANTERIOR,
DEM_FEC_EMISION,
DEM_SITUACION,
dem_doc_aplicado,
DEM_IND_EXTORNO,
DEM_FECH_EXTORNO,
DEM_ID_USUARIO_EXT,
DEM_CORRELATIVO,
'I',
GETDATE(),
'02'

From INSERTED
end

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

gracias por la ayuda...

Preguntas similares