A. sql觸發器寫法
觸發器(trigger)是SQL server 提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用於加強數據的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數據字典中查到。SQL3的觸發器是一個能由系統自動執行對資料庫修改的語句。
語法:
DELIMITER |
CREATE TRIGGER `<databaseName>`.`<triggerName>`
< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON [dbo]<tableName> //dbo代表該表的所有者
FOR EACH ROW
BEGIN
--do something
END |
例子:
-- 插入時執行觸發器
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
create trigger [dbo].[rscOpenInsert]
on [dbo].[RSC_INFO]
for insert
as www.2cto.com
DECLARE
@v_rscID varchar(50),
@v_status int
begin
select @v_rscID=rscID,@v_status=status from inserted;
--取得當前資源信息status>4 才插入信息
if @v_status > 4
begin
insert into RSC_OPEN_SYNCHRONOUS(rscID,opStatus,opDateTime) values (@v_rscID,'insert',getDate())
end
end
--- 更新時執行觸發器
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
create trigger [dbo].[rscOpenUpdate]
on [dbo].[RSC_INFO]
for update
as
DECLARE
@v_rscID varchar(50),
@v_status int
begin www.2cto.com
select @v_rscID=rscID,@v_status=status from inserted;
--取得當前資源信息status>4 才更新信息
if @v_status > 4
begin
update RSC_OPEN_SYNCHRONOUS set opStatus = 'update', opDateTime = getDate() where rscID=@v_rscID
end
end
B. SQL觸發器編寫
基本語法 create trigger tri_name on table for insert/update/deleted as SQL code 例: create trigger tri_mc(tri_mc:自定義觸發器的名稱) on table (table:觸發的表名) for insert (觸發類型:insert,插入數據觸發 update,更新數據觸發 delete,刪除數據觸發) as declare @kssj datetime (定義一個變數,做中間處理) declare @sqbh char(40) select @kssj = kssj,@sqbh = sqbh from inserted (插入數據時,插入的數據在表 inserted 更新數據時,更新後的數據在表 inserted 更新前的數據在表中 deleted 刪除數據時,刪除的數據在表 deleted 不同的操作可以,取出不同的中間數據,做處理,例子中取出插入的數據) update table2 set isks = 1,kksj = @kssj where sqbh = @sqbh (根據中間處理做相應操作,例子的處理為,將插入的值同步更新到另一個表)
C. SQL觸發器編程
1、
在「Borrow」表中創建一個觸發器ins_borrower_tr,當向「借閱」表中插入記錄時,「借書日期」不能為空值,「還書日期」必須為空值。不滿足上述條件則不允許向「借閱」表中插入記錄,滿足上述條件則允許插入,同時得到該書的應還日期,且「圖書」表中對應的圖書數量要減1,此操作對應讀者的借書行為。
----「借書日期」不能為空值
可以通過
IS
NOT
NULL
來設置,不需要觸發器;
----「還書日期」必須為空值
可以通過設置默認值實現,就是不管輸入何值,最後都清空;
----「應還日期」是通過「借書日期」計算得出、「圖書」表中對應的圖書數量要減1
:兩個功能通過觸發器實現;
CREATE
TRIGGER
ins_borrower_tr
ON
Borrow
FOR
INSERT
AS
BEGIN
UPDATE
Borrow
SET
應還日期
=
借書日期
+ n
FROM
Borrow,Inserted
WHERE
Borrow.b_id,
=
Inserted.b_id
【其他的類似】
END
GO
2、在「Borrow」表中創建一個觸發器del_borrower_tr,當刪除「借閱」表中的某個記錄時,若「還書日期」為空值,則不允許刪除該記錄。
----
這個可以通過觸發器實現
3、在「Borrow」表中創建一個觸發器update_return_tr,當更新「借閱」表中的某個記錄時,只能更新「還書日期」欄位,其他欄位不能更新,請計算出是否過期並給出罰款信息(過期一天罰款0.1元)。如果更新,「book」表中對應的圖書數量要加1。此操作對應讀者的還書行為。
----只能更新「還書日期」欄位,其他欄位不能更新:這個不好實現的,因為如果程序中是可寫的,就有點麻煩了!建議在程序中設置其他欄位修改時為只讀屬性。
----其他科通過觸發器實現。
D. 如何在代碼中實現SQL中的觸發器
觸發器是自動觸發的,比如:新增記錄、修改記錄、刪除記錄的時候觸發。
E. c語言怎麼使用sql觸發器
c語言怎麼使用sql觸發器:
定義: 何為觸發器?在SQL Server裡面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程序。觸發器是一個特殊的存儲過程。
常見的觸發器有三種:分別應用於Insert , Update , Delete 事件。
我為什麼要使用觸發器?比如,這么兩個表:
Create Table Student( --學生表
StudentID int primary key, --學號
....
)
Create Table BorrowRecord( --學生借書記錄表
BorrowRecord int identity(1,1), --流水號
StudentID int , --學號
BorrowDate datetime, --借出時間
ReturnDAte Datetime, --歸還時間
...
)
用到的功能有:
1.如果我更改了學生的學號,我希望他的借書記錄仍然與這個學生相關(也就是同時更改借書記錄表的學號);
2.如果該學生已經畢業,我希望刪除他的學號的同時,也刪除它的借書記錄。
等等。
這時候可以用到觸發器。對於1,創建一個Update觸發器:
Create Trigger truStudent
On Student --在Student表中創建觸發器
for Update --為什麼事件觸發
As --事件觸發後所要做的事情
if Update(StudentID)
begin
Update BorrowRecord
Set StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i --Deleted和Inserted臨時表
Where br.StudentID=d.StudentID
end
理解觸發器裡面的兩個臨時的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示觸發事件的表「舊的一條記錄」和「新的一條記錄」。
一個資料庫系統中有兩個虛擬表用於存儲在表中記錄改動的信息,分別是:
虛擬表Inserted 虛擬表Deleted
在表記錄新增時 存放新增的記錄 不存儲記錄
修改時 存放用來更新的新記錄 存放更新前的記錄
刪除時 不存儲記錄 存放被刪除的記錄
一個Update 的過程可以看作為:生成新的記錄到Inserted表,復制舊的記錄到Deleted表,然後刪除Student記錄並寫入新紀錄。
對於2,創建一個Delete觸發器
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID
從這兩個例子我們可以看到了觸發器的關鍵:A.2個臨時的表;B.觸發機制。
F. SQl中觸發器怎樣執行的
創建觸發器 是特殊的存儲過程,自動執行,一般不要有返回值。
1、後觸發器 (AFTER,FOR)先執行對應語句,後執行觸發器中的語句。
2、前觸發器 並沒有真正的執行觸發語句(insert,update,delete),而是執行觸發後的語句。
3、行級觸發器 (FOR EACH ROW) 在SQL server 中不存在。
(6)sql觸發器寫在程序裡面擴展閱讀:
創建觸發的語法
CREATE TRIGGER trigger_name --觸發器名稱
ON table_name --觸發的表
[WITH ENCRYPTION]
FOR [DELETE, INSERT, UPDATE] --選擇觸發器類型
AS --觸發後要做的語句
T-SQL語句
GO --結束標記
G. sql server裡面的觸發器怎麼寫
基本語法
create trigger tri_name
on table
for insert/update/deleted
as
SQL code
例:
create trigger tri_mc(tri_mc:自定義觸發器的名稱)
on table (table:觸發的表名)
for insert (觸發類型:insert,插入數據觸發 update,更新數據觸發 delete,刪除數據觸發)
as
declare @kssj datetime (定義一個變數,做中間處理)
declare @sqbh char(40)
select @kssj = kssj,@sqbh = sqbh from inserted
(插入數據時,插入的數據在表 inserted
更新數據時,更新後的數據在表 inserted 更新前的數據在表中 deleted
刪除數據時,刪除的數據在表 deleted
不同的操作可以,取出不同的中間數據,做處理,例子中取出插入的數據)
update table2 set isks = 1,kksj = @kssj where sqbh = @sqbh
(根據中間處理做相應操作,例子的處理為,將插入的值同步更新到另一個表)
H. SQL中觸發器的代碼寫在哪裡
oracle是寫在pl/SQL塊中
下面就是一個觸發器
每執行一次update操作就顯示一定的信息
CREATE TRIGGER before_update_trigger
before update of price
on procts
begin
if new.price<old.price then
--輸出信息
DBMS_OUTPUT.PUT_LINE('價格降低了');
else
DBMS_OUTPUT.PUT_LINE('價格升高了');
end if;
end before_update_trigger;
這個觸發器會在執行update語句之間觸發
I. sql怎麼寫觸發器
基本語法格式
create trigger tri_name
on table
for insert/update/deleted
as
SQL code
例:
create trigger tri_mc(tri_mc:自定義觸發器的名稱)
on table (table:觸發的表名)
for insert (觸發類型:insert,插入數據觸發 update,更新數據觸發 delete,刪除數據觸發)
as
declare @kssj datetime (定義一個變數,做中間處理)
declare @sqbh char(40)
select @kssj = kssj,@sqbh = sqbh from inserted
(插入數據時,插入的數據在表 inserted
更新數據時,更新後的數據在表 inserted 更新前的數據在表中 deleted
刪除數據時,刪除的數據在表 deleted
不同的操作可以,取出不同的中間數據,做處理,例子中取出插入的數據)
update table2 set isks = 1,kksj = @kssj where sqbh = @sqbh
(根據中間處理做相應操作,例子的處理為,將插入的值同步更新到另一個表)
J. SQL中觸發器創建與調用
先給你舉個觸發器的實例:
先創建兩個表
Create Table Student( --學生表
StudentID int primary key, --學號
....
)
Create Table BorrowRecord( --學生借書記錄表
BorrowRecord int identity(1,1), --流水號
StudentID int , --學號
BorrowDate datetime, --借出時間
ReturnDAte Datetime, --歸還時間
...
)
創建觸發器
Create Trigger truStudent
On Student --在Student表中創建觸發器
for Update --為什麼事件觸發,在這里就是修改的時候會執行這個觸發器,一旦你修改Student表,就會執行
As --事件觸發後所要做的事情
if Update(StudentID)
begin
Update BorrowRecord
Set StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i --Deleted和Inserted臨時表
Where br.StudentID=d.StudentID
end