2009-10-30 124 views
4

我有一個表的結構是這樣的:SQL服務器觸發

create table status_master 
(
    Name varchar(40) 
    status varchar(10) 
) 

我需要創建觸發器狀態欄,如果狀態列的值更新值 失敗則觸發調用一個插入commant像:

insert into temp value('s',s's') 

你能請任何一個給我解決這個想法嗎?

+3

你能澄清嗎?我不明白你真正想要達到什麼...... –

+0

語法錯誤,如你的例子,永遠不會觸發。 – Dave

+0

同意marc_s。什麼是「更新的價值」?狀態?什麼是名爲「temp」的表的結構?你放在那裏的是什麼? –

回答

0

你在找什麼是INSTEAD OF INSERT,UPDATE觸發器。在你的觸發器中,你嘗試插入或更新你自己的嘗試。如果出錯,則將這些值插入到其他表中(假設它是某種記錄表)。

2

不知道你真正想要的實現 - 但在SQL Server中,有兩種類型的觸發器:

  • AFTER AFTER觸發器INSERT,UPDATE火,DELETE
  • INSTEAD OF觸發器可以捕捉操作(INSERT,UPDATE,DELETE)並執行某些操作

SQL Server沒有BEFORE INSERT/UPDATE/DELETE觸發器其他RDBMS有。

您可以有任意數量的AFTER觸發器,但每個操作(INSERT,UPDATE,DELETE)只有一個INSTEAD OF觸發器。

更常見的情形是AFTER觸發器,是這樣的:

CREATE TRIGGER trgCheckInsertedValues 
ON status_master 
AFTER INSERT 
AS 
BEGIN 
    INSERT INTO dbo.temp(field1, field2, field3) 
    SELECT i.Name, i.Status 
    FROM inserted i 
    WHERE i.Status = 'FAIL' 
END 

在這裏,我檢查「插入」僞表含有插入表中的所有行,每一行包含「status = FAIL」,你會插入一些字段到「temp」表中。

再次 - 不知道你真的想要詳細 - 但這將是粗略的大綱如何在SQL Server T-SQL代碼中做到這一點。

馬克

0

假設你的意思是,如果狀態的新值是失敗了,那麼你看這個:

觸發器引用新的記錄行作爲「插入」和舊的「已刪除」

CREATE TRIGGER trgCheckInsertedValues ON status_master INSERT AS

之後開始

如果inserted.statu S = 'FAIL' INSERT INTO dbo.temp(FIELD1,FIELD2,字段3)
SELECT i.Name,i.Status,FROM插入i的SQL