PROBLEMA CON TRIGGER SQL SERVER 2008 SR2
Publicado por Coral (3 intervenciones) el 17/01/2013 23:13:24
Hola, tenemos el siguiente trigger que se ejecuta tras actualizar la tabla TL_ticketsCabecera y escribe un archivo V123.txt con el importe del total del ticket (importe) de esa operación, funciona correctamente, solo que por alguna razón, lo hace 3 veces por cada ticket creado, se supone que el programa hace 3 updates en esa tabla y por eso genera los 3 archivos(por supuesto no tenemos acceso al código del programa, por eso solo tengo el recurso de los triggers).
La pregunta es.... como evitar eso y hacer que solo genere un solo archivo por cada ticket generado o que por cada tres UPDATE de la tabla solo se active una vez el trigger?
USE [DATABASE]
GO
/****** Object: Trigger [dbo].[Cash] Script Date: 01/10/2013 17:39:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Cash] ON [dbo].[TL_TicketsCabecera]
AFTER UPDATE
AS
DECLARE @UnidadOperativa VARCHAR(20)
DECLARE @Jornada VARCHAR(8)
DECLARE @Numero VARCHAR(20)
DECLARE @Importe NUMERIC(9,2)
DECLARE @COMMAND VARCHAR(1000)
DECLARE @Caja VARCHAR(20);
BEGIN
SELECT
@UnidadOperativa= TC.UnidadOperativa,
@Jornada= TC.Jornada,
@Numero= TC.Numero,
@Importe = TC.Importe,
@Caja=TC.Caja
FROM
inserted AS TC
LEFT JOIN
[dbo].[TL_TicketsPagos] AS TP
ON
(TC.UnidadOperativa = TP.UnidadOperativa AND TC.Jornada= TP.Jornada AND TC.Numero= TP.Numero)
WHERE
TP.Tipo='MET'
GROUP BY
TC.UnidadOperativa, TC.Jornada, TC.Numero, TC.Importe, TC.Caja
IF (@Importe>0 AND @Caja='CAJA01')
BEGIN
SET @COMMAND='@ECHO ' + CAST(ABS(@Importe) AS VARCHAR(6)) +' >C:\CAS\V123.TXT'
EXEC Xp_CMDSHELL @COMMAND
END
ELSE
BEGIN
END
La pregunta es.... como evitar eso y hacer que solo genere un solo archivo por cada ticket generado o que por cada tres UPDATE de la tabla solo se active una vez el trigger?
USE [DATABASE]
GO
/****** Object: Trigger [dbo].[Cash] Script Date: 01/10/2013 17:39:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Cash] ON [dbo].[TL_TicketsCabecera]
AFTER UPDATE
AS
DECLARE @UnidadOperativa VARCHAR(20)
DECLARE @Jornada VARCHAR(8)
DECLARE @Numero VARCHAR(20)
DECLARE @Importe NUMERIC(9,2)
DECLARE @COMMAND VARCHAR(1000)
DECLARE @Caja VARCHAR(20);
BEGIN
SELECT
@UnidadOperativa= TC.UnidadOperativa,
@Jornada= TC.Jornada,
@Numero= TC.Numero,
@Importe = TC.Importe,
@Caja=TC.Caja
FROM
inserted AS TC
LEFT JOIN
[dbo].[TL_TicketsPagos] AS TP
ON
(TC.UnidadOperativa = TP.UnidadOperativa AND TC.Jornada= TP.Jornada AND TC.Numero= TP.Numero)
WHERE
TP.Tipo='MET'
GROUP BY
TC.UnidadOperativa, TC.Jornada, TC.Numero, TC.Importe, TC.Caja
IF (@Importe>0 AND @Caja='CAJA01')
BEGIN
SET @COMMAND='@ECHO ' + CAST(ABS(@Importe) AS VARCHAR(6)) +' >C:\CAS\V123.TXT'
EXEC Xp_CMDSHELL @COMMAND
END
ELSE
BEGIN
END
Valora esta pregunta


0