㈠ sql 觸發器的使用,
--關於問題1
CREATETRIGGERTRI1
ONUser
FORINSERT
AS
BEGIN
INSERTINTOInformation
SELECTid,
name
FROMINSERTED
END
GO
注意:name後面的列,如果不管的話,給個默認值,否則會出現插入錯誤。
例如:
INSERTINTOInformation
SELECTid,
name,
NULL,
NULL--等等
FROMINSERTED
關於問題2~
CREATETRIGGERTRI2
ONUser
FORUPDATE
AS
IFUPDATE(name)
BEGIN
UPDATEInformation
SETA.name=B.name
FROMInformationA,INSERTEDB
WHEREA.id=B.id
END
GO
㈡ sql 觸發器怎麼用
觸發器是自動觸發的,不需要也不能手動調用
㈢ 如何使用sql觸發器
CREATE OR REPLACE TRIGGER INSERT_STU_TRIGGER
BEFORE INSERT ON STUDENT
FOR EACH ROW
DECLARE
v_alone_course number;
v_total_course number;
v_TRUEANSWER varchar2(20);
v_t1 number;
BEGIN
select j.題目編號1 into v_t1 from juanzi j where j.卷號=:new.卷號;
select t.分值,t.TRUEANSWER into v_alone_course,v_TRUEANSWER from timu t where t."題目編號"=v_t1;
if v_trueanswer = :new.答案1 then
select v_alone_course into :new.成績 from al;
end if;
END;
這個是按照你的需求寫的一個ORACLE資料庫的SQL語句。
下面這個是測試添加語句:
insert into student(學號,教師工號,卷號,答案1) VALUES(123456,40564,1001,'A');
㈣ sql的觸發器是干什麼的,怎麼用
觸發器是用來保證數據一致性用的.他分為兩種一種是操作前觸發另外一種是操作後觸發 ,主要是對數據的插入,刪除,修改等動作進行跟蹤及作出相應動作
㈤ SQl中觸發器怎樣執行的
創建觸發器 是特殊的存儲過程,自動執行,一般不要有返回值。
1、後觸發器 (AFTER,FOR)先執行對應語句,後執行觸發器中的語句。
2、前觸發器 並沒有真正的執行觸發語句(insert,update,delete),而是執行觸發後的語句。
3、行級觸發器 (FOR EACH ROW) 在SQL server 中不存在。
(5)sql觸發器怎麼用擴展閱讀:
創建觸發的語法
CREATE TRIGGER trigger_name --觸發器名稱
ON table_name --觸發的表
[WITH ENCRYPTION]
FOR [DELETE, INSERT, UPDATE] --選擇觸發器類型
AS --觸發後要做的語句
T-SQL語句
GO --結束標記
㈥ SQL觸發器如何使用
在SQL中,觸發器是一種特殊類型的存儲過程,它不同於SQL的存儲過程。觸發器主要是通過事件進行觸發而被執行的,而存儲過程可以通過存儲過程名字而被直接調用。當對某一表進行諸如UPDATE、
INSERT、
DELETE
這些操作時,SQL
Server
就會自動執行觸發器所定義的SQL
語句,從而確保對數據的處理必須符合由這些SQL
語句所定義的規則。
觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據的一致性。除此之外,觸發器還有其它許多不同的功能:
(1)強化約束(Enforce
restriction)
觸發器能夠實現比CHECK
語句更為復雜的約束。
(2)跟蹤變化(Auditing
changes)
觸發器可以偵測資料庫內的操作,從而不允許資料庫中未經許可的指定更新和變化。
(3)級聯運行(Cascaded
operation)。
觸發器可以偵測資料庫內的操作,並自動地級聯影響整個資料庫的各項內容。例如,某個表上的觸發器中包含有對另外一個表的數據操作(如刪除,更新,插入)而該操作又導致該表上觸發器被觸發。
(4)存儲過程的調用(Stored
procere
invocation)。
為了響應資料庫更新觸,發器可以調用一個或多個存儲過程,甚至可以通過外部過程的調用而在DBMS(
資料庫管理系統)本身之外進行操作。
由此可見,觸發器可以解決高級形式的業務規則或復雜行為限制以及實現定製記錄等一些方面的問題。例如,觸發器能夠找出某一表在數據修改前後狀態發生的差異,並根據這種差異執行一定的處理。此外一個表的同一類型(INSERT、
UPDATE、
DELETE)的多個觸發器能夠對同一種數據操作採取多種不同的處理。
總體而言,觸發器性能通常比較低。當運行觸發器時,系統處理的大部分時間花費在參照其它表的這一處理上,因為這些表既不在內存中也不在資料庫設備上,而刪除表和插入表總是位於內存中。可見觸發器所參照的其它表的位置決定了操作要花費的時間長短。
觸發器的種類
SQL
Server
2000
支持兩種類型的觸發器:AFTER
觸發器和INSTEAD
OF
觸發器。其中AFTER
觸發器即為SQL
Server
2000
版本以前所介紹的觸發器。該類型觸發器要求只有執行某一操作(INSERT
UPDATE
DELETE)
之後,觸發器才被觸發,且只能在表上定義。可以為針對表的同一操作定義多個觸發器。對於AFTER
觸發器,可以定義哪一個觸發器被最先觸發,哪一個被最後觸發,通常使用系統過程sp_settriggerorder
來完成此任務。
INSTEAD
OF
觸發器表示並不執行其所定義的操作(INSERT、
UPDATE、
DELETE),而僅是執行觸發器本身。既可在表上定義INSTEAD
OF
觸發器,也可以在視圖上定義INSTEAD
OF
觸發器,但對同一操作只能定義一個INSTEAD
OF觸發器。
㈦ sql2008觸發器怎麼用
//from 前面多個逗號
CREATE TRIGGER trg_A
ON A
FOR INSERT
AS
insert into B
select inserted.日期,
inserted.數據A-A.數據A as 數據A,
inserted.數據B-A.數據B as 數據B
from inserted.A
where datediff(day,A.日期,inserted.日期)=1
㈧ 請問sql觸發器insert觸發器如何使用
DML觸發器有三類:
1, insert觸發器;
2, update觸發器;
3, delete觸發器;
觸發器的組成部分:
觸發器的聲明,指定觸發器定時,事件,表名以類型
觸發器的執行,PL/SQL塊或對過程的調用
觸發器的限制條件,通過where子句實現
類型:
應用程序觸發器,前台開發工具提供的;
資料庫觸發器,定義在資料庫內部由某種條件引發;分為:
DML觸發器;
資料庫級觸發器;
替代觸發器;
DML觸發器組件:
1,觸發器定時
2,觸發器事件
3,表名
4, 觸發器類型
5, When子句
6, 觸發器主體
可創建觸發器的對象:資料庫表,資料庫視圖,用戶模式,資料庫實例
創建DML觸發器:
Create [or replace] trigger [模式.]觸發器名
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 條件
PL/SQL塊
For each row的意義是:在一次操作表的語句中,每操作成功一行就會觸發一次;不寫的話,表示是表級觸發器,則無論操作多少行,都只觸發一次;
When條件的出現說明了,在DML操作的時候也許一定會觸發觸發器,但是觸發器不一定會做實際的工作,比如when 後的條件不為真的時候,觸發器只是簡單地跳過了PL/SQL塊;
Insert觸發器的創建:
create or replace trigger tg_insert
before insert on student
begin
dbms_output.put_line('insert trigger is chufa le .....');
end;
執行的效果:
SQL> insert into student
2 values(202,'dongqian','f');
insert trigger is chufa le .....
update表級觸發器的例子:
create or replace trigger tg_updatestudent
after update on student
begin
dbms_output.put_line('update trigger is chufale .....');
end;
運行效果:
SQL> update student set se='f';
update trigger is chufale .....
已更新8行;
可見,表級觸發器在更新了多行的情況下,只觸發了一次;
㈨ sql如下情況,怎麼使用觸發器做到
把這個工作分兩步做:
1 在a表傷建立觸發器,實現a表增加數據,同時插入b表。
2 做一個資料庫任務,每天執行,刪除b表中,30天之前的數據。
㈩ 怎麼用SQL做觸發器
我寫的,沒有經過測試,僅供參考,如果不對的話請原諒
CREATE TRIGGER books_rt_upd
ON books_rt
FOR UPDATE
AS
IF UPDATE (return_date)
BEGIN
-- 定義 借書日期
declare @lend_date date
-- 定義 應還書日期
declare @return_date date
-- 定義 超出天數
declare @exday int
-- 定義 超出價格
declare @exfee decimal
-- 定義 用戶id
declare @userid
-- 定義 用戶id
declare @usertype
-- 修改用戶歸還日期,和借書的id號
select @return_date=return_date , @lendid = lendid from INSERTED
select
@lend_date=lend_date,@userid=userid ,@usertype=@usertype
from
books_rt
where lendid in (select lendid from INSERTED)
-- 計算超出多少天並乘以價格
set @exday = @return_date - @lend_date
-- 根據用戶級別察看是否超過天數
IF @usertype= '01' begin
if @exday > '10' --01級別可以借書10天
begin
set @exday = @exday - 10
end
end
IF @usertype= '02' begin
if @exday > '20' --02級別可以借書20天
begin
set @exday = @exday - 20
end
end
set @exfee = @exday * 0.3
-- 修改用戶帳戶表
update user_account set user_fee = userfee - @exfee
where userid = @userid
END