求觸發器語句
觸發器語句:
CREATE TRIGGER tri_stuscore ON stuscore
FOR UPDATE
AS
UPDATE stuscore SET *r=5 WHERE *r>5
go
這句話得出來的結果是當你更新時,它會相應地更新數據庫已有的scoyear>5的信息。
如果你想要當你數據更新完后,才更新數據庫已有的信息。要加AFTER
即:
CREATE TRIGGER tri_stuscore ON stuscore
AFTER UPDATE
AS
UPDATE stuscore SET *r=5 WHERE *r>5
go
這個得看數據庫是哪個版本的,sql2000和sql2005不大相同,雖然我都用過,但是忘記區別了,有些在sql2000可以的在sql2005不行。當然,mysql和sql也很不一樣,mysql的比較難建立。
數據庫 觸發器有什么用
觸發器
觸發器的定義就是說某個條件成立的時候,你觸發器里面所定義的語句就會被自動的執行。因此觸發器不需要人為的去調用,也不能調用。
然后,觸發器的觸發條件其實在你定義的時候就已經設定好的了。這里面需要說明一下,觸發器可以分為語句級觸發器和行級觸發器。詳細的介紹可以參考網上的資料,簡單的說就是語句級的觸發器可以在某些語句執行前或執行后被觸發。而行級觸發器則是在定義的了觸發的表中的行數據改變時就會被觸發一次。
具體舉例:
1. 在一個表中定義的語句級的觸發器,當這個表被刪除時,程序就會自動執行觸發器里面定義的操作過程。這個就是刪除表的操作就是觸發器執行的條件了。
2. 在一個表中定義了行級的觸發器,那當這個表中一行數據發生變化的時候,比如刪除了一行記錄,那觸發器也會被自動執行了。
觸發器簡介:
觸發器是一種特殊類型的過程。與普通過程不同的是,過程需要用戶顯式地調用才執行,而觸發器則是當某些事件發生時,由Oracle自動執行。
觸發器主要由如下幾個部分組成:
觸發事件:
觸發條件:
觸發對象:
觸發操作:
編寫觸發器時,需要注意以下幾點:
觸發器不接受參數。
一個表上最多可以有12個觸發器,但同一時間、同一事件、同一類型的觸發器只能有一個。還需要注意,各個觸發器之間不能有矛盾。
在一個表上的觸發器越多,對在該表上的DML操作性能影響就越大。
觸發器最大為32KB。如果確實需要,可以先建立過程,然后在觸發器中用CALL語句調用。
在DML觸發器中只能使用DML語句(select,insert,update,delete)。
在系統觸發器中只能包含DDL語句(create,alter,drop)。
觸發器中不能包含事務控制語句(commit,rollback,savepoint)。因為觸發器是觸發語句的一部門,觸發語句被提交或回退時,觸發器也就被提交或回退了。
在觸發器主體中調用的任何過程、函數都不能使用事務控制語句。
在觸發器主體中不能聲明任何long和blob變量。新值new、舊值old也不能指向表中的任何long和blog列
不同類型的觸發器(如DML觸發器、INSTEAD OF觸發器、系統觸發器)的語法格式和作用都有較大區別。
SQL觸發語句怎么寫
create trigger tr_test
on 單據
for insert
as
declare @bzj float, @cgj float
select @bzj=inserted.標準價,@cgj=inserted.采購價
from inserted
if @bzj==0.01
begin
@bzj=@cgj*1.05
update 單據
set 標準價=@bzj
where 標準價=0.01
go
你看這樣寫可不可以?
求一個簡單的觸發器語句
create trigger insertRow2
on my_table
for insert
as
DECLARE @n_id tinyint,@a char(10),@b char(10),@c char(10)
select @n_id=n_id,@a=a,@b=b,@c=c from inserted
if(@n_id=1)
BEGIN
insert into my_table values(2,@a,@b,@c);
END