Ich muss einen Trigger in SQL Server zum Ausfüllen einer Tabelle erstellen, wenn ein Ereignis abgeschlossen ist.Einfügen nach Ereignisauslöser in SQL Server
Mein Code:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Tr_EsportaMancatiContatti]
ON [dbo].[Lav_CollaudiVodaf_StoricoMancatiContatti]
AFTER INSERT
AS
BEGIN
DECLARE @IDPRATStorico INT;
DECLARE @IDPRAT INT;
DECLARE @CodRichiestaCRM INT;
DECLARE @IDESITO INT;
DECLARE @Telefono VARCHAR;
DECLARE @DataOraContatto INT;
SET NOCOUNT ON;
SET @IDPRATStorico = (SELECT IDPRATStorico 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 AND count(@IDPRAT) < 3
BEGIN
INSERT Lav_CollaudiVodaf_StoricoMancatiContatti
SET [email protected]
SET [email protected]
SET [email protected]
SET Telefono=Telefono
SET [email protected]
WHERE [email protected];
END
END;
Es wirft einige Fehler.
Ziel: Ich habe eine Tabelle mit Kontakt gefüllt haben, ich brauche diese Aufzeichnung in einer anderen Tabelle einfügen, wenn die IDESITO 18 ist und die Zählung in der neuen Tabelle ist < 3.
Jeder Vorschlag ist willkommen.
Welche Fehler geben ist das? –
Zuerst ist "eingefügt" eine Tabelle mit möglicherweise vielen Zeilen. Der Trigger sollte Tabelle verarbeiten, keine einzelnen Werte. – Serg
Ihr Auslöser hat ** MAJOR ** Fehler in dem Sie scheinen anzunehmen, dass es ** einmal pro Zeile ** genannt wird - das ist ** nicht ** der Fall. Der Trigger wird ** einmal pro Anweisung ** ausgelöst. Wenn also Ihre INSERT-Anweisung, die diesen Auslöser auslöst, 25 Zeilen einfügt, erhalten Sie den Trigger einmal ** ausgelöst, dann aber die "Eingefügte" Pseudo-Tabelle enthalten 25 Zeilen. Welche dieser 25 Zeilen wird Ihr Code hier auswählen? 'SELECT Telefono FROM inserted' - es ist nicht deterministisch, Sie erhalten ** eine beliebige Zeile ** und Sie werden ** ignorieren alle anderen Zeilen **. Sie müssen Ihren Trigger neu schreiben, um dies zu berücksichtigen! –