0
イベントが完了した場合にテーブルを埋めるためにSQL Serverにトリガーを作成する必要があります。SQL Serverでイベントトリガー後に挿入
マイコード:
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;
それはいくつかのエラーがスローされます。
ターゲット:私は連絡先でいっぱいのテーブルを持っている任意の提案が高く評価されIDESITOが18で、新しいテーブルのカウントが< 3.
であれば、私は、別のテーブルにこれらのレコードを挿入する必要があります。
それがどのようなエラーを与えず、カウント(@IDPRAT)< 3を達成しようとしているのかわからないのですか? –
まず、 'inserted'はおそらく多くの行を持つテーブルです。トリガーは単一の値ではなく、テーブルを処理する必要があります。 – Serg
あなたのトリガーには、**メジャー**の欠陥があります。**行ごとに** **一度**と呼ばれると思われるようです。トリガは**文ごとに** **起動します。したがって、このトリガを起動させる 'INSERT'文が25行挿入された場合、トリガは一度**発生しますが、' Inserted'擬似テーブルは25行あります。あなたのコードがここで選択する25行のうちどれですか? 'SELECTテレフォンFROMが挿入されました' - それは非決定論的です、あなたは**任意の行**を得て、あなたは**すべての他の行を無視します**。これを考慮に入れてトリガーを書き直す必要があります。 –