2013-04-14 127 views
1

如何創建在更新或插入之前運行的觸發器,並檢查新行是否具有特定條件?觸發器 - 與SQL Server

比方說列A的值大於5

謝謝。

+0

創建'而不是插入,更新'觸發器;在觸發器體內部,你可以訪問代表新行的'inserted'虛擬表。如果條件爲真,我想你需要做一些動作,而不僅僅是防止插入這樣的記錄,如Marcin Juraszek指出的那樣,可以使用CHECK約束來有效地完成這些記錄。 – a1ex07

回答

3

假設A列中有值超過5

應該在表列,而不是TRIGGER使用CHECK constraint進行,例如更大:

CREATE TABLE [dbo].[SalesHistory](
     (...) 
     [A] [int] NULL CHECK (A > 5) 
) 
+0

,但如果我想做它觸發器呢?在這種情況之後, – dimka87il

+0

可能觸發特定的邏輯 – dimka87il

1

您可以使用INSTEAD OF觸發

簡單示例:

CREATE TRIGGER iu_trigger ON [dbo].[SalesHistory] 
INSTEAD OF INSERT, UPDATE 
AS 
BEGIN 
    IF EXISTS (
      SELECT 1 
      FROM inserted 
      WHERE A > 5 
      ) 
    BEGIN 
    PRINT 'A > 5'  
    END 
    ELSE 
    BEGIN 
    PRINT 'A <= 5' 
    END    
END