濮阳杆衣贸易有限公司

主頁 > 知識庫 > SQLServer中的觸發(fā)器基本語法與作用

SQLServer中的觸發(fā)器基本語法與作用

熱門標(biāo)簽:南通智能外呼系統(tǒng)怎么樣 南京怎么申請400這種電話 真3地圖標(biāo)注 地圖標(biāo)注可以編輯地名嗎 疫情時(shí)期電話機(jī)器人 地圖標(biāo)注跑線下市場 臺灣外呼系統(tǒng)軟件 樂昌電話機(jī)器人 濮陽清豐400開頭的電話申請

什么是觸發(fā)器?

觸發(fā)器是在對表進(jìn)行插入、更新或刪除操作時(shí)自動執(zhí)行的存儲過程。 觸發(fā)器對表進(jìn)行插入、更新、刪除的時(shí)候會自動執(zhí)行的特殊存儲過程。觸發(fā)器一般用在check約束更加復(fù)雜的約束上面。觸發(fā)器和普通的存儲過程的區(qū)別是:觸發(fā)器是當(dāng)對某一個表進(jìn)行操作。諸如:update、insert、delete這些操作的時(shí)候,系統(tǒng)會自動調(diào)用執(zhí)行該表上對應(yīng)的觸發(fā)器。SQL Server 2005中觸發(fā)器可以分為兩類:DML觸發(fā)器和DDL觸發(fā)器,其中DDL觸發(fā)器它們會影響多種數(shù)據(jù)定義語言語句而激發(fā),這些語句有create、alter、drop語句。

SQL Server為每個觸發(fā)器都創(chuàng)建了兩個專用表﹕Inserted表和Deleted表。

觸發(fā)器通常用于強(qiáng)制業(yè)務(wù)規(guī)則

觸發(fā)器是一種高級約束,可以定義比用CHECK 約束更為復(fù)雜的約束 :可執(zhí)行復(fù)雜的SQL語句(if/while/case)、可引用其它

表中的列

觸發(fā)器定義在特定的表上,與表相關(guān)。

自動觸發(fā)執(zhí)行

不能直接調(diào)用

是一個事務(wù)(可回滾)使用觸發(fā)器的好處觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實(shí)現(xiàn)級聯(lián)更改,不過,通過級聯(lián)引用完整性約束可以更有效地執(zhí)行這些更改。觸發(fā)器可以強(qiáng)制比用CHECK約束定義的約束更為復(fù)雜的約束。與 CHECK 約束不同,觸發(fā)器可以引用其它表中的列。例如,觸發(fā)器可以使用另一個表中的 SELECT 比較插入或更新的數(shù)據(jù),以及執(zhí)行其它操作,如修改數(shù)據(jù)或顯示用戶定義錯誤信息。觸發(fā)器也可以評估數(shù)據(jù)修改前后的表狀態(tài),并根據(jù)其差異采取對策。一個表中的多個同類觸發(fā)器(INSERT、UPDATE 或 DELETE)允許采取多個不同的對策以響應(yīng)同一個修改語句。

DML觸發(fā)器分為:

1、 after觸發(fā)器(之后觸發(fā))

a、 insert觸發(fā)器

b、 update觸發(fā)器

c、 delete觸發(fā)器

UPDATE 觸發(fā)器創(chuàng)建觸發(fā)的語法

CREATE TRIGGER trigger_name
ON table_name
[WITH ENCRYPTION]
FOR [DELETE, INSERT, UPDATE]
AS
T-SQL語句
GO

注意:WITH ENCRYPTION表示加密觸發(fā)器定義的SQL文本 DELETE, INSERT, UPDATE指定觸發(fā)器的類型 insert 觸發(fā)器示例

/*創(chuàng)建insert觸發(fā)器,在上網(wǎng)記錄表recordInfo上創(chuàng)建插入觸發(fā)器*/
create trigger tr_insert_recordInfo
on recordInfo
for insert
as
/*定義變量,用于臨時(shí)存儲插入的會員號、電腦編號和卡的編號*/
declare @cardId char()
declare @PCId int
declare @CardNumber char()
/*從inserted臨時(shí)表中獲取插入的記錄行的信息,包括電腦的編號、卡的編號*/
select @PCId=PCId,@cardId=CardId from inserted
/*根據(jù)電腦編號修改電腦的使用狀態(tài)*/
update PCInfo set PCUse= where PCId=@PCId
/*根據(jù)卡的編號查詢會員號*/
select @CardNumber=CardNumber from cardinfo where CardId=@cardid
/*顯示上機(jī)成功的信息*/
print '上機(jī)成功!會員號是:'+@CardNumber+'機(jī)器號是:'+convert(char(),@PCId)
go
----插入測試數(shù)據(jù),會員號為的上機(jī)
set nocount on --不顯示sql語句影響的記錄行數(shù)
declare @CardId int ---聲明一個存儲卡的編號的變量
---根據(jù)會員號查處卡的編號
select @cardId=cardid from cardinfo where cardNumber='c' 
---向recordInfo表中插入一條記錄信息,卡的編號、電腦編號和上機(jī)時(shí)間
insert into recordInfo(cardId,PCId,beginTime) values(@cardId,,getDate())
----查看結(jié)果
select * from recordInfo
select * from PCInfo

update觸發(fā)器示例

---創(chuàng)建delete觸發(fā)器,在上網(wǎng)記錄表RecordInfo上創(chuàng)建刪除觸發(fā)器
create trigger tr_delete_recordInfo
on recordInfo
for delete
as
if exists(select * from sysobjects where name='backRecordInfo')
----如果backrecordInfo表存在,就添加記錄即可
insert into backRecordInfo select * from deleted
else
----創(chuàng)建backRecordInfo表,從deleted中獲取被刪除的數(shù)據(jù)
select * into backRecordInfo from deleted
print'backRecordInfo表備份數(shù)據(jù)成功,備份表中的數(shù)據(jù)為:'
select * from backRecordInfo
go
-------關(guān)鍵代碼------
----測試delete觸發(fā)器,刪除數(shù)據(jù)
set nocount on
delete from recordInfo
---查看結(jié)果
print'記錄表中的數(shù)據(jù)為:'
select * from recordInfo

delete觸發(fā)器示例

-------關(guān)鍵代碼------
create trigger tr_update_recordInfo
on recordInfo
for update
as
declare @beforePCId int
declare @afterPCId int
select @beforePCId =PCId from deleted
select @afterPCId=PCID from inserted
---根據(jù)電腦編號修改使用狀態(tài)-----
---根據(jù)以前使用的電腦編號把電腦的使用狀態(tài)改為:
update PCInfo set PCUse= where PCId=@beforePCId
---根據(jù)現(xiàn)在使用的電腦編號把電腦的使用狀態(tài)改為:
update PCInfo set PCUse= where PCId=@afterPCId
----顯示電腦換機(jī)成功
print'換機(jī)成功!從'+convert(varchar(),@beforePCId)+'號電腦換到'+convert(varchar(),@afterPCId)+'號電腦'
go
/*測試update觸發(fā)器,修改電腦編號*/
--顯示更改前,記錄表中的數(shù)據(jù)
print'更改前,記錄表中的數(shù)據(jù)'
select * from recordInfo
--顯示更改前,電腦表中的數(shù)據(jù)
print'更改前,電腦表中的數(shù)據(jù)'
select * from PCInfo
set nocount on
---把電腦號為的改為
update recordInfo set PCId= where PCId= 
---查看結(jié)果
print'更改后,記錄表中的數(shù)據(jù)'
select * from recordInfo
print'更改后,電腦表中的數(shù)據(jù)'
select * from PCInfo

instead of觸發(fā)器的使用 instead of觸發(fā)器的使用范圍,instead of 觸發(fā)器可以同時(shí)在數(shù)據(jù)表和視圖中使用。通常在以下幾種情況下,建議使用instead of觸發(fā)器: 數(shù)據(jù)庫里的數(shù)據(jù)禁止修改:例如電信部門的通話記錄是不能修改的,一旦修改,則通話費(fèi)用的計(jì)數(shù)將不準(zhǔn)確。 有可能要回滾修改的SQL語句 在視圖中使用觸發(fā)器 用自己的方式去修改數(shù)據(jù) instead of觸發(fā)器示例

---創(chuàng)建update觸發(fā)器,在上網(wǎng)記錄表recordInfo上創(chuàng)建修改(列)觸發(fā)器
create trigger tr_updateColum1_recordInfo
on recordInfo
instead of insert
as
declare @cardbalance int --聲明用于存儲用戶余額的變量
declare @CardId int --聲明用于存儲用戶卡的編號的變量
declare @PCId int --聲明用于存儲電腦編號的變量
---inserted臨時(shí)表中獲取插入的記錄行信息,包括電腦編號、卡的編號
select @cardId=cardId,@PCId=PCId from inserted
select @cardbalance=cardBalance from cardInfo where CardId=@CardId
print'您的余額為:'+convert(varchar(10),@cardBalance) ---打印余額信息
if(@cardBalance2) ---判斷余額多少,看能否正常上機(jī)
print'余額小于元,不能上機(jī)。請盡快充值!'
else
----根據(jù)電腦的編號修改電腦的使用狀態(tài)更改為正在使用
update PCInfo set PCUse=1 where PCId=@PCId
----向recordInfo表插入上機(jī)記錄
insert into recordInfo(cardId,PCId,beginTime)values(@CardId,@PCId,getdate())
print'上機(jī)成功'
-------關(guān)鍵代碼------
set nocount on
declare @cardId int ---聲明一個存儲卡的編號的變量
---根據(jù)會員號查出卡的編號
select @cardId=cardId from cardInfo where cardNumber='c001'
----向recordInfo表中插入一條記錄信息,卡的編號、電腦的編號和上機(jī)時(shí)間
insert into recordInfo(cardId,PCId,beginTime)values(@cardId,1,getdate())
select * from recordInfo
select * from PCInfo

以上所述是小編給大家介紹的SQLSever中的觸發(fā)器基本語法與作用的相關(guān)內(nèi)容,希望對大家有所幫助!

您可能感興趣的文章:
  • SQL Server 觸發(fā)器 表的特定字段更新時(shí),觸發(fā)Update觸發(fā)器
  • sqlserver 禁用觸發(fā)器和啟用觸發(fā)器的語句
  • SQLServer觸發(fā)器創(chuàng)建、刪除、修改、查看示例代碼
  • 用sql腳本創(chuàng)建sqlserver數(shù)據(jù)庫觸發(fā)器范例語句
  • SQL Server觸發(fā)器及觸發(fā)器中的事務(wù)學(xué)習(xí)
  • 在登錄觸發(fā)器錯誤情況下連接SQL Server的方法
  • sqlserver 觸發(fā)器教程
  • sqlserver 觸發(fā)器實(shí)例代碼
  • sqlserver中觸發(fā)器+游標(biāo)操作實(shí)現(xiàn)
  • Sql Server觸發(fā)器的使用
  • SQL SERVER 觸發(fā)器介紹
  • SQL SERVER中各類觸發(fā)器的完整語法及參數(shù)說明

標(biāo)簽:馬鞍山 福建 河北 通遼 廣安 陜西 阿里 南京

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQLServer中的觸發(fā)器基本語法與作用》,本文關(guān)鍵詞  SQLServer,中的,觸發(fā)器,基本,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQLServer中的觸發(fā)器基本語法與作用》相關(guān)的同類信息!
  • 本頁收集關(guān)于SQLServer中的觸發(fā)器基本語法與作用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    镇安县| 云南省| 乌苏市| 石家庄市| 江山市| 赣榆县| 阿克陶县| 哈密市| 南阳市| 梁山县| 崇文区| 子洲县| 蚌埠市| 维西| 大足县| 马龙县| 财经| 保德县| 石城县| 张掖市| 开化县| 高青县| 湛江市| 西昌市| 陇川县| 岱山县| 海盐县| 东丰县| 静安区| 秦皇岛市| 栾城县| 维西| 永仁县| 商洛市| 怀安县| 蚌埠市| 临夏市| 南雄市| 兴安县| 乐至县| 珲春市|