2017-05-12 16 views
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 

にトリガされません。

このトリガーのトラブルシューティング方法を教えてください。

+1

私がトラブルシューティングを行っていた場合は、最初に別個にテストして、トリガーの外側で動作することを確認しました。次に、IF EXISTSステートメントを使わずにテストして、トリガーがJOINとともに正しく挿入されていることを確認します。 –

+3

最後に、あなたの 'UPDATE'ステートメントに欠陥があります - **決して**通常の等価演算子で' NULL'をチェックしない** **常に**使用する*のみ* 'IS NULL'または' IS NOT NULL '..... –

答えて

0

out_timeのinsert文では、nullの代わりに''を割り当てます。その結果、

UPDATE文で

WHERE emp_id = @emp_id AND out_time = NULL 

条件のあなたの第二の部分が満たされていません。

関連する問題