0
私はエラーなしで作成されたこのトリガーを持っています。しかし、それはレコードがテーブルDaily_Atten_Events
に挿入されていない挿入なぜ私のトリガは機能していませんか?
CREATE TRIGGER dbo.Get_Each_InOut
ON [SiPassAPI].[dbo].[INFO]
AFTER INSERT
AS
BEGIN
IF EXISTS(SELECT eventno FROM INSERTED
WHERE message LIKE '%valid%' AND message LIKE '%entry%'
AND type != 0)
BEGIN
INSERT INTO [SiPassAPI].[dbo].[Daily_Atten_Events] (emp_id, empid, date_occurred, working_date, in_time, out_time, duration_present)
SELECT
i.emp_id, e.emp_no, date_occurred,
SUBSTRING(i.date_occurred, 1, 4) + '-' +
SUBSTRING(i.date_occurred, 5, 2) + '-' +
SUBSTRING(i.date_occurred, 7, 2),
SUBSTRING(i.date_occurred, 1, 4) + '-' +
SUBSTRING(i.date_occurred, 5, 2) + '-' +
SUBSTRING(i.date_occurred, 7, 2) + ' '+
SUBSTRING(i.time_occurred, 1, 2) + ':' +
SUBSTRING(i.time_occurred, 3, 2) + ':' +
SUBSTRING(i.time_occurred, 5, 2),
'', ''
FROM
INSERTED i
INNER JOIN
[asco4].[asco].[employee] e ON e.emp_id = i.emp_id;
END;
IF EXISTS (SELECT eventno FROM INSERTED
WHERE message LIKE '%valid%' AND message LIKE '%exit%'
AND type != 0)
BEGIN
DECLARE @time2 varchar(20);
DECLARE @date_val varchar(20);
DECLARE @time_val varchar(20);
DECLARE @emp_id varchar(20);
SELECT
@emp_id = emp_id,
@date_val = date_occurred,
@time_val = time_occurred
FROM
INSERTED
SET @time2 = SUBSTRING(@date_val,1,4)+'-'+SUBSTRING(@date_val,5,2)+'-'+SUBSTRING(@date_val,7,2)+' '+SUBSTRING(@time_val,1,2)+':'+SUBSTRING(@time_val,3,2)+':'+SUBSTRING(@time_val,5,2);
UPDATE [SiPassAPI].[dbo].[Daily_Atten_Events]
SET out_time = @time2,
duration_present = CONVERT(varchar(10), DATEDIFF(HOUR, in_time, @time2)) + ':' +
CONVERT(varchar(10), DATEDIFF(MI, in_time, @time2) % 60)
WHERE
emp_id = @emp_id AND out_time = NULL
END;
END;
GO
にトリガされません。
このトリガーのトラブルシューティング方法を教えてください。
私がトラブルシューティングを行っていた場合は、最初に別個にテストして、トリガーの外側で動作することを確認しました。次に、IF EXISTSステートメントを使わずにテストして、トリガーがJOINとともに正しく挿入されていることを確認します。 –
最後に、あなたの 'UPDATE'ステートメントに欠陥があります - **決して**通常の等価演算子で' NULL'をチェックしない** **常に**使用する*のみ* 'IS NULL'または' IS NOT NULL '..... –