十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
SQL SERVER中觸發(fā)器的觸發(fā)類(lèi)型有三種。
創(chuàng)新互聯(lián)建站主營(yíng)大廠網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,手機(jī)APP定制開(kāi)發(fā),大廠h5微信小程序搭建,大廠網(wǎng)站營(yíng)銷(xiāo)推廣歡迎大廠等地區(qū)企業(yè)咨詢(xún)
1、DML觸發(fā)器,當(dāng)數(shù)據(jù)庫(kù)中表中的數(shù)據(jù)發(fā)生變化時(shí),包括insert,update,delete任意操作,如果對(duì)該表寫(xiě)了對(duì)應(yīng)的DML觸發(fā)器,那么該觸發(fā)器自動(dòng)執(zhí)行。
2、DDL觸發(fā)器,是Sql Server2005新增的觸發(fā)器,主要用于審核與規(guī)范對(duì)數(shù)據(jù)庫(kù)中表,觸發(fā)器,視圖等結(jié)構(gòu)上的操作。比如在修改表,修改列,新增表,新增列等。它在數(shù)據(jù)庫(kù)結(jié)構(gòu)發(fā)生變化時(shí)執(zhí)行,主要用它來(lái)記錄數(shù)據(jù)庫(kù)的修改過(guò)程,以及限制程序員對(duì)數(shù)據(jù)庫(kù)的修改。
3、登錄觸發(fā)器,登錄觸發(fā)器將為響應(yīng) LOGIN 事件而激發(fā)存儲(chǔ)過(guò)程。與 SQL Server 實(shí)例建立用戶(hù)會(huì)話時(shí)將引發(fā)此事件。登錄觸發(fā)器將在登錄的身份驗(yàn)證階段完成之后且用戶(hù)會(huì)話實(shí)際建立之前激發(fā)。
擴(kuò)展資料:
DML觸發(fā)器的主要作用在于強(qiáng)制執(zhí)行業(yè) 務(wù)規(guī)則,以及擴(kuò)展Sql Server約束,默認(rèn)值等。因?yàn)槲覀冎兰s束只能約束同一個(gè)表中的數(shù)據(jù),而觸發(fā)器中則可以執(zhí)行任意Sql命令。
來(lái)自登錄觸發(fā)器內(nèi)部且通常將到達(dá)用戶(hù)的所有消息(例如錯(cuò)誤消息和來(lái)自 PRINT 語(yǔ)句的消息)會(huì)傳送到 SQL Server 錯(cuò)誤日志。如果身份驗(yàn)證失敗,將不激發(fā)登錄觸發(fā)器。
觸發(fā)器可在寫(xiě)入數(shù)據(jù)表前,強(qiáng)制檢驗(yàn)或轉(zhuǎn)換數(shù)據(jù)。觸發(fā)器發(fā)生錯(cuò)誤時(shí),異動(dòng)的結(jié)果會(huì)被撤銷(xiāo)??梢勒仗囟ǖ那闆r,替換異動(dòng)的指令 (INSTEAD OF)。
--創(chuàng)建多表更新觸發(fā)器(trg_class_Update)
create Trigger [dbo].[trg_class_Update]
On [dbo].[class]
after update
As
if update(cid) --變更c(diǎn)id時(shí)觸發(fā)
begin
update product set pcid=I.cid from product as B,deleted D, inserted as I where B.pcid=D.cid
end
go
CREATE TRIGGER [dbo].[表1_UPDATE_表2] --這里是觸發(fā)器名稱(chēng),最好一目了然的
ON [dbo].[表1]
FOR UPDATE,INSERT,DELETE --更新,插入,刪除時(shí)觸發(fā)(根據(jù)實(shí)際情況,可以只用一個(gè))
AS
BEGIN
--下面是你的語(yǔ)句,我沒(méi)有修改,只是調(diào)整了排版和大小寫(xiě)
UPDATE 表2
SET name=0,age=''
FROM 表2 INNER JOIN
(
SELECT DISTINCT ABS(id) AS billid,sale_z.ele_sordercode
FROM 表3
WHERE ele_sordercode''
) 表3
ON 表2.tid=表3.id LEFT JOIN
(
SELECT MAX(id) AS id, referbillid
FROM 表1
WHERE referbillid0
GROUP BY referbillid
) 表1 ON 表3.id=表1.id
WHERE name=1 AND refer.id IS NULL
END
通常創(chuàng)建觸發(fā)器以在不同表中的邏輯相關(guān)數(shù)據(jù)之間實(shí)施引用完整性或一致性。例子:
--
創(chuàng)建一個(gè)表(數(shù)據(jù)庫(kù)設(shè)計(jì)的部分)
Create
Table
OrderLog
(
EditDate
smalldatetime
)
--
創(chuàng)建觸發(fā)器,當(dāng)OrderList表被UPDATE的時(shí)候,執(zhí)行一段操作
CREATE
TRIGGER
tr_OrderList_Log
On
OrderList
AFTER
UPDATE
AS
Insert
Into
OrderLog(EditDate)
Values(getDate())
GO
--
修改表OrderList中的OutDate,使得觸發(fā)器被執(zhí)行
Update
OrderList
Set
OutDate
=
getDate()
--
察看觸發(fā)器執(zhí)行的后果
select
*
from
OrderLog
SQL Server2000提供了兩種觸發(fā)器:“Instead of” 和“After” 觸發(fā)器。
一個(gè)表或視圖的每一個(gè)修改動(dòng)作(Insert、Update和Delete)都可以有一個(gè)“Instead of” 觸發(fā)器,一個(gè)表的每個(gè)修改動(dòng)作都可以有多個(gè)“After”觸發(fā)器。
create trigger trigger_name
on {table_name|view_name}
{After|Instead of} {insert|update|delete}
as 相應(yīng)T-SQL語(yǔ)句