TRIGGER per SELECT and INSERT.

di il
1 risposte

TRIGGER per SELECT and INSERT.

Ciao a tutti,

devo creare una query con una sottoquery, in quanto il risultato che vuole essere ottenuto, sarebbe che a parità di un IDPRAT devo selezionare il primo contatto, l'ultimo contatto e quello nel mezzo. A volte capita che sono anche 4 pratiche e in questo caso me ne andrebbe bene uno dei due(tra il primo e l'ultimo) senza preferenze. Fortuna ho l'orario del contatto. La query attuale prevede la selezione dei campi interessati che agisce quotidianamente in tre orari diversi.
SELECT idPrat, CodRichiestaCRM, Telefono,  convert(VARCHAR(19), DataOraContatto, 21) as DataOraContatto
			 FROM Lav_CollaudiVodaf_Storico 
			 WHERE (IdEsito = 18)  AND DataOraContatto >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))
			AND DataOraContatto <  DATEADD(DAY, 1, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))

Per creare la tabella.
CREATE TABLE [dbo].[Lav_CollaudiVodaf_Storico](
	[IdStorico] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
	[IdPrat] [int] NOT NULL,
	[CodRichiestaCRM] [int] NULL,
	[Telefono] [varchar](15) NULL,
	[IdEsito] [int] NULL,
	[DataOraContatto] [datetime] NULL,
	
 CONSTRAINT [PK_Lav_CollaudiVodaf_Storico_1] PRIMARY KEY CLUSTERED 
(
	[IdStorico] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Lav_CollaudiVodaf_Storico] ADD  CONSTRAINT [DF_Lav_CollaudiVodaf_Storico_DataImport]  DEFAULT (getdate()) FOR [DataImport]
GO
INSERT INTO [dbo].[Lav_CollaudiVodaf_Storico]
           ([IdPrat]
           ,[CodRichiestaCRM]
           ,[Telefono]
          ,[IdEsito]
           ,[DataOraContatto]])
     VALUES
           (<IdPrat, int,>
           ,<CodRichiestaCRM, int,>
           ,<Telefono, varchar(15),>
            ,<IdEsito, int,>
           ,<CodiceRichiesta, varchar(20),>
          ,<DataOraContatto, datetime,>
          )
GO
Ora viene la parte difficile, in pratica devo effettuare un check sulla selezione precedente. Questa selezione viene effettuata 3 volte al giorno,
ho la necessità che nella seconda selezione vengano controllato che nella selezione precedente ci siano 3 contatti, in caso contrario deve avvenire una insert in una tabella temporanea (o simili). Credo che devo usare un trigger nel momento in cui si scatena un evento (IDESITO è 18).

AIUTO.

1 Risposte

  • Re: TRIGGER per SELECT and INSERT.

    In effetti non era così difficile.
    USE [Dispatcher]
    GO
    /****** Oggetto:  Trigger [dbo].[Tr_EsportaMancatiContatti]    Data script: 05/03/2016 16:26:55 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[Tr_EsportaMancatiContatti]
       ON  [dbo].[Lav_CollaudiVodaf_Storico]
       AFTER INSERT
    AS 
    BEGIN
    	DECLARE @IDStorico INT;
    	DECLARE @IDPRAT INT;
    	DECLARE @CodRichiestaCRM INT;
    	DECLARE @conteggio INT;
    	DECLARE @IDESITO INT;
    	DECLARE	@Telefono VARCHAR;
    	DECLARE @DataOraContatto datetime;
    
    	SET NOCOUNT ON;
    
    	SET @IDStorico = (SELECT IDStorico FROM inserted);
    	SET @IDPRAT = (SELECT IDPRAT FROM inserted);
    	SET @CodRichiestaCRM = (SELECT CodRichiestaCRM FROM inserted);
    	SET @IDESITO = (SELECT IDESITO FROM inserted);
    	SET @Telefono = (SELECT Telefono  FROM inserted);
    	SET @DataOraContatto = (SELECT DataOraContatto FROM inserted);
    	
    
    	IF @IDESITO = 18  
    		
    		BEGIN
    		SELECT @conteggio = count(IdPrat) FROM Lav_CollaudiVodaf_StoricoMancatiContatti 
    		WHERE IdPrat = @IDPRAT;
    			
    			
    			IF @conteggio <3
    			
    			BEGIN
    			INSERT INTO Lav_CollaudiVodaf_StoricoMancatiContatti
    			(IDStorico, IDPRAT, CodRichiestaCRM, IDESITO, Telefono, DataOraContatto)
    			SELECT  IDStorico, IDPRAT, CodRichiestaCRM, IDESITO, Telefono, DataOraContatto
    			FROM Lav_CollaudiVodaf_Storico
    			WHERE IDStorico=@IDStorico;			
    		
    			END
    		END
    END;
    
Devi accedere o registrarti per scrivere nel forum
1 risposte