2015-10-09 24 views
2

我希望此觸發器只能在特定時間和另一時間(例如上午6點至下午10點)之間工作。請幫忙!sql觸發器 - 按時間限制

ALTER TRIGGER [db].[el] ON [Reports].[db].[stat] 
AFTER INSERT, UPDATE 
AS 

SET NOCOUNT ON; 

INSERT INTO [Reports].[db].[el] 
      (
       [StationID] 
       ,[Count] 

      ) 
SELECT i.StationID, 
     i.[EmptyDockCount], 
     GETDATE(), 
     NULL, 
     NULL, 
     i.[LastUpdateDate], 
FROM INSERTED i 
INNER JOIN DELETED d 
on d.StationID = i.StationID 
INNER JOIN DBOS.dbo.StationDim bsd 
ON bsd.StationID = i.StationID 
WHERE i.[Count] = 0 
AND d.[count] <> 0 

; 
+1

用'IF DATEPART(hh,GETDATE())之間的換行...和...'? – lad2025

+0

你有一個內聯接DELETED,但你也有這個定義爲一個INSERT觸發器。在插入過程中,刪除的表格將始終爲空。您應該修復邏輯或不要使用插入觸發器。 –

回答

2

嘗試這樣,

這是關鍵的財務報表的折算(TIME,GETDATE())之間的 '6:00:00.0000000' 和'22:00:00.0000000'

ALTER TRIGGER [db].[el] 
    ON [Reports].[db].[stat] 
    AFTER INSERT, UPDATE 
    AS 
     SET NOCOUNT ON; 

     IF CONVERT(TIME, Getdate()) BETWEEN '6:00:00.0000000' AND '22:00:00.0000000' 
      BEGIN 
       INSERT INTO [Reports].[db].[el] 
          ([StationID], 
          [Count]) 
       SELECT i.StationID, 
        i.[EmptyDockCount], 
        Getdate(), 
        NULL, 
        NULL, 
        i.[LastUpdateDate] 
       FROM INSERTED i 
        INNER JOIN DELETED d 
          ON d.StationID = i.StationID 
        INNER JOIN DBOS.dbo.StationDim bsd 
          ON bsd.StationID = i.StationID 
       WHERE i.[Count] = 0 
        AND d.[count] <> 0 
      END;