Ⅰ 如何設置sql 觸發器
一、什麼是PPT中的觸發器
1
在通常情況下,用 PowerPoint 製作出來的演示文稿,其播放順序是固定的,這樣就在一定程度上影響了演示文稿的交互性。
Ⅱ SQL觸發器怎麼做
CREATE
TRIGGER
[km]
ON
員工表
AFTER
DELETE
AS
BEGIN
DELETE
FROM
工資表
WHERE
員工編號
IN
(SELECT
員工編號
FROM
deleted)
END
CREATE
TRIGGER
[gf]
ON
員工表
AFTER
UPDATE
AS
BEGIN
UPDATE
工資表
SET
部門編號=(SELECT
部門編號
FROM
inserted)
WHERE
員工編號=(SELECT
員工編號
FROM
inserted)
END
Ⅲ SQL中,觸發器是什麼
觸發器是對表進行插入、更新、刪除的時候會自動執行的特殊存儲過程。
觸發器一般用在check約束更加復雜的約束上面。例如在執行update、insert、delete這些操作的時候,系統會自動調用執行該表上對應的觸發器。
SQL Server 2005中觸發器可以分為兩類:DML觸發器和DDL觸發器,其中DDL觸發器它們會影響多種數據定義語言語句而激發,這些語句有create、alter、drop語句。
DML觸發器分為:
1、 after觸發器(之後觸發)
a、 insert觸發器
b、 update觸發器
c、 delete觸發器
2、 instead of 觸發器 (之前觸發)
其中after觸發器要求只有執行某一操作insert、update、delete之後觸發器才被觸發,且只能定義在表上。而instead of觸發器表示並不執行其定義的操作(insert、update、delete)而僅是執行觸發器本身。既可以在表上定義instead of觸發器,也可以在視圖上定義。
觸發器有兩個特殊的表:插入表(instered表)和刪除表(deleted表)。這兩張是邏輯表也是虛表。有系統在內存中創建者兩張表,不會存儲在資料庫中。而且兩張表的都是只讀的,只能讀取數據而不能修改數據。這兩張表的結果總是與被改觸發器應用的表的結構相同。當觸發器完成工作後,這兩張表就會被刪除。Inserted表的數據是插入或是修改後的數據,而deleted表的數據是更新前的或是刪除的數據。
Update數據的時候就是先刪除表記錄,然後增加一條記錄。這樣在inserted和deleted表就都有update後的數據記錄了。注意的是:觸發器本身就是一個事務,所以在觸發器裡面可以對修改數據進行一些特殊的檢查。如果不滿足可以利用事務回滾,撤銷操作。
Ⅳ SQl中觸發器怎樣執行的
創建觸發器 是特殊的存儲過程,自動執行,一般不要有返回值。
1、後觸發器 (AFTER,FOR)先執行對應語句,後執行觸發器中的語句。
2、前觸發器 並沒有真正的執行觸發語句(insert,update,delete),而是執行觸發後的語句。
3、行級觸發器 (FOR EACH ROW) 在SQL server 中不存在。
(4)SQL觸發器擴展閱讀:
創建觸發的語法
CREATE TRIGGER trigger_name --觸發器名稱
ON table_name --觸發的表
[WITH ENCRYPTION]
FOR [DELETE, INSERT, UPDATE] --選擇觸發器類型
AS --觸發後要做的語句
T-SQL語句
GO --結束標記
Ⅳ SQL觸發器
我建了兩個表:
proct(pno,pname,ptype,pcount),分別是編號 商品名稱 類型 數量,
sale(pno,pname,ptype,price,biaojia,pcount,contact)分別是編號 商品名稱 類型 售價 標價 數量 聯系人。
觸發器如下:
create trigger p_s
on proct
after insert
as begin
declare @no char(10)
declare @name char(20)
declare @t char(10)
set @no=(select pno from inserted)
set @name=(select pname from inserted)
set @t=(select ptype from inserted)
insert into sale values(
@no,@name,@t,'','','0','')
end
在執行一次插入操作:
insert into proct
values('1','','web','1')
成功!
Ⅵ 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觸發器。
Ⅶ sql觸發器是什麼
觸發器(trigger)是個特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。給你個例子:
Create TRIGGER [dbo].[trgA]
ON [dbo].[TableA]
AFTER INSERT AS
BEGIN
//觸發sql
END
Ⅷ sql server 觸發器
問題補充:這是考試題,必須觸發器啊,呵呵
CREATE
TRIGGER
tri_Insert
ON
OrderList
FOR
INSERT
AS
DECLARE
@CustomerNo
數據類型不明;
BEGIN
--
Ⅸ sql的觸發器怎麼做
這個不能用觸發器,要用作業。
打開企業管理器,進入你伺服器名下的「管理」,啟動SQL Server代理。然後查看伺服器屬性,選中「自動啟動SQL Server代理」。
接下來進入SQL Server代理下的「作業」,在右邊點右鍵選「新建作業」。
在「常規」里,隨便輸入一個作業名,分類要選最後一項「資料庫維護」。
在「步驟」里,點「新建步驟」,隨便輸入一個步驟名,資料庫選成你的資料庫,命令里輸入你刪除記錄的語句,也可以通過「打開」來裝載T-SQL腳本,弄好後記得分析一下,沒有問題再繼續。在「高級」里將「失敗時的操作」改成「轉到下一步」。
在「調度」里,點「新建調度」,隨便輸入一個調度名,點「更改」,「發生頻率」選每天,「一次發生於」里設置17:00:00,然後點「確定」,再點「確定」,再點「確定」,配置就完成了。
Ⅹ SQL中觸發器有什麼作用
觸發器(trigger)是SQL server 提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用於加強數據的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數據字典中查到。SQL3的觸發器是一個能由系統自動執行對資料庫修改的語句。
觸發器與存儲過程的唯一區別是觸發器不能執行EXECUTE語句調用,而是在用戶執行Transact-SQL語句時自動觸發執行。
觸發器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用於強制服從復雜的業務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。
觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關系圖,則可以在表之間創建關系以自動創建外鍵約束。
SQL Server 包括三種常規類型的觸發器:DML 觸發器、DDL 觸發器和登錄觸發器。
語法為:
CREATE TRIGGER `<databaseName>`.`<triggerName>`
< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON [dbo]<tableName> //dbo代表該表的所有者
FOR EACH ROW
BEGIN
--do something
END
觸發器可通過資料庫中的相關表實現級聯更改,不過,通過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以強制比用CHECK約束定義的約束更為復雜的約束。與 CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。觸發器也可以評估數據修改前後的表狀態,並根據其差異採取對策。一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許採取多個不同的對策以響應同一個修改語句。
約束和觸發器在特殊情況下各有優勢。觸發器的主要好處在於它們可以包含使用 Transact-SQL 代碼的復雜處理邏輯。因此,觸發器可以支持約束的所有功能;但它在所給出的功能上並不總是最好的方法。實體完整性總應在最低級別上通過索引進行強制,這些索引或是 PRIMARY KEY 和 UNIQUE 約束的一部分,或是在約束之外獨立創建的。假設功能可以滿足應用程序的功能需求,域完整性應通過 CHECK 約束進行強制,而引用完整性(RI) 則應通過 FOREIGN KEY 約束進行強制。在約束所支持的功能無法滿足應用程序的功能要求時,觸發器就極為有用。
CHECK 約束只能根據邏輯表達式或同一表中的另一列來驗證列值。如果應用程序要求根據另一個表中的列驗證列值,則必須使用觸發器。約束只能通過標準的系統錯誤信息傳遞錯誤信息。如果應用程序要求使用(或能從中獲益)自定義信息和較為復雜的錯誤處理,則必須使用觸發器。
觸發器可通過資料庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以禁止或回滾違反引用完整性的更改,從而取消所嘗試的數據修改。當更改外鍵且新值與主鍵不匹配時,此類觸發器就可能發生作用。例如,可以在 titleauthor.title_id 上創建一個插入觸發器,使它在新值與 titles.title_id 中的某個值不匹配時回滾一個插入。不過,通常使用 FOREIGN KEY 來達到這個目的。
如果觸發器表上存在約束,則在 INSTEAD OF 觸發器執行後但在 AFTER 觸發器執行前檢查這些約束。如果約束破壞,則回滾 INSTEAD OF 觸發器操作並且不執行 AFTER 觸發器。
實例1:insert觸發器
create trigger tri_insert
on student
for insert
as
declare @student_id char(10)
select @student_id=s.student_id from
student s inner join inserted i
on s.student_id=i.student_id
if @student_id='0000000001'
begin
raiserror('不能插入1的學號!',16,8)
rollback tran
end
go
實例2:update觸發器
create trigger tri_update
on student
for update
as
if update(student_id)
begin
raiserror('學號不能修改!',16,8)
rollback tran
end
go
實例3:delete觸發器示
create trigger tri_delete
on student
for delete
as
declare @student_id varchar(10)
select @student_id=student_id from deleted
if @student_id='admin'
begin
raiserror('錯誤',16,8)
rollback tran
end