1. 程式人生 > >SQLServer觸發器建立、刪除、修改、檢視示例程式碼

SQLServer觸發器建立、刪除、修改、檢視示例程式碼

一: 觸發器是一種特殊的儲存過程﹐它不能被顯式地呼叫﹐而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地啟用。所以觸發器可以用來實現對錶實施複雜的完整性約束。 

二: SQL Server為每個觸發器都建立了兩個專用表:Inserted表和Deleted表。這兩個表。

一: 觸發器是一種特殊的儲存過程﹐它不能被顯式地呼叫﹐而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地啟用。所以觸發器可以用來實現對錶實施複雜的完整性約`束。 

二: SQL Server為每個觸發器都建立了兩個專用表:Inserted表和Deleted表。這兩個表由系統來維護﹐它們存在於記憶體中而不是在資料庫中。這兩個表的結構總是與被該觸發器作用的表的結構相同。觸發器執行 完成後﹐與該觸發器相關的這兩個表也被刪除。 

Deleted表存放由於執行Delete或Update語句而要從表中刪除的所有行。 
Inserted表存放由於執行Insert或Update語句而要向表中插入的所有行。 
三:Instead of 和 After觸發器 
SQL Server2000提供了兩種觸發器:Instead of 和After 觸發器。這兩種觸發器的差別在於他們被啟用的同: 

Instead of觸發器用於替代引起觸發器執行的T-SQL語句。除表之外﹐Instead of 觸發器也可以用於檢視﹐用來擴充套件檢視可以支援的更新操作。 

After觸發器在一個Insert,Update或Deleted語句之後執行﹐進行約束檢查等動作都在After觸發器被啟用之前發生。After觸發器只能用於表。 


一個表或檢視的每一個修改動作(insert,update和delete)都可以有一個instead of 觸發器﹐一個表的每個修改動作都可以有多個After觸發器。 
四:觸發器的執行過程 
如果一個Insert﹑update或者delete語句違反了約束﹐那么After觸發器不會執行﹐因為對約束的檢查是在After觸發器被激動之前發生的。所以After觸發器不能超越約束。 

Instead of 觸發器可以取代激發它的操作來執行。它在Inserted表和Deleted表剛剛建立﹐其它任何操作還沒有發生時被執行。因為Instead of 觸發器在約束之前執行﹐所以它可以對約束進行一些預處理。 

五:使用T-SQL語句來建立觸發器


基本語句如下: 
create trigger trigger_name 
on {table_name | view_name} 
{for | After | Instead of } 
[ insert, update,delete ] 
as 
sql_statement 

六:刪除觸發器: 

基本語句如下: 

drop trigger trigger_name 

七:檢視資料庫中已有觸發器: 

-- 檢視資料庫已有觸發器 
use jxcSoftware 
go 
select * from sysobjects where xtype='TR' 

-- 檢視單個觸發器 
exec sp_helptext '觸發器名' 

八:修改觸發器:

基本語句如下: 
alter trigger trigger_name 
on {table_name | view_name} 
{for | After | Instead of } 
[ insert, update,delete ] 
as 
sql_statement 

九:相關示例:
1:在Orders表中建立觸發器﹐當向Orders表中插入一條訂單記錄時﹐檢查goods表的貨品狀態status是否為1(正在整理)﹐是﹐則不能往Orders表加入該訂單。 
create trigger orderinsert 
on orders 
after insert 
as 
if (select status from goods,inserted 
where goods.name=inserted.goodsname)=1 
begin 
print 'the goods is being processed' 
print 'the order cannot be committed' 
rollback transaction --回滾﹐避免加入 
end 
2:在Orders表建立一個插入觸發器﹐在新增一條訂單時﹐減少Goods表相應的貨品記錄中的庫存。 
create trigger orderinsert1 
on orders 
after insert 
as 
update goods set storage=storage-inserted.quantity 
from goods,inserted 
where 
goods.name=inserted.goodsname 
3:在Goods表建立刪除觸發器﹐實現Goods表和Orders表的級聯刪除。 
create trigger goodsdelete 
on goods 
after delete 
as 
delete from orders 
where goodsname in 
(select name from deleted) 
4:在Orders表建立一個更新觸發器﹐監視Orders表的訂單日期(OrderDate)列﹐使其不能手工修改. 
create trigger orderdateupdate 
on orders 
after update 
as 
if update(orderdate) 
begin 
raiserror(' orderdate cannot be modified',10,1) 
rollback transaction 
end 
5:在Orders表建立一個插入觸發器﹐保證向Orders表插入的貨品名必須要在Goods表中一定存在。 
create trigger orderinsert3 
on orders 
after insert 
as 
if (select count(*) from goods,inserted where goods.name=inserted.goodsname)=0 
begin 
print ' no entry in goods for this order' 
rollback transaction 
end 

6:Orders表建立一個插入觸發器,保證向Orders表插入的貨品資訊要在Order表中新增 

alter trigger addOrder 
on Orders 
for insert 
as 
insert into Order 
select inserted.Id, inserted.goodName,inserted.Number from inserted

相關推薦

SQLServer觸發器建立刪除修改檢視示例程式碼

一: 觸發器是一種特殊的儲存過程﹐它不能被顯式地呼叫﹐而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地啟用。所以觸發器可以用來實現對錶實施複雜的完整性約束。 二: SQL Server為每個觸發器都建立了兩個專用表:Inserted表和Deleted表。這兩個表。一:

loner_li SQLServer觸發器建立刪除修改檢視...

一: 觸發器是一種特殊的儲存過程﹐它不能被顯式地呼叫﹐而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地啟用。所以觸發器可以用來實現對錶實施複雜的完整性約束。二: SQL Server為每個觸發器都建立了兩個專用表:Inserted表和Deleted表。這兩個表。 一: 觸發器是一種特殊的儲存過程﹐它不能被

HiveQL 資料定義語言使用(一)—Hive中資料庫的建立顯示刪除修改操作介紹

問題導讀:          1、建立資料庫命令中DATABASE可以被哪個關鍵字代替使用?          2、在建立資料庫的時候如何指定資料庫存放路徑?          3、如果一個數據庫中含有表,那麼刪除該資料庫有哪兩種方式?          4、刪除資料庫命令

oracle建立表空間刪除表空間修改表空間名稱

-----oracle建立表空間的方法 create  tablespace dragon  --dragon為建立的表空間名稱 bagfile/smallfile代表建立 datafile 'D:\dragon.dbf'  --D:\dragon.dbf為資料檔名稱和 存放的地址 size 100M r

Qt操作SQLite資料庫——建立開啟關閉增加刪除修改操作

if(!database.open()) { qDebug()<<database.lastError(); qFatal("failed to connect.") ; } else { //QSqlQuery類提供執行和操作的SQL語句的方法。 //可以用來執行DML(資料操作語言)語句,

數據庫復習總結(7)-表的創建以及插入命令數據修改數據刪除

位置 bject src key arc cat () 例如 truncate 一、表的操作 表:創建、修改、刪除 通過select * from sysobjects where xtype=‘U‘可以查看所有存在的表 多個列間使用逗號分隔

windows下如何添加刪除修改靜態路由

class 永久路由 pre 數據包 dd命令 如果 所有 pos ber 1、添加一條路由表 route add 192.168.100.0 mask 255.255.255.248 192.168.1.1 metric 3 if 2 1 2 添加一條路由記錄

mysql在表的某一位置增加一列刪除一列修改列名

如果想在一個已經建好的表中新增一列,可以用以下程式碼: alter table 表名 add column 列名 varchar(20) not null; 這條語句會向已有的表中加入一列,這一列在表的最後一列位置。如果我們希望新增在指定的一列,可以用: alter table 表名 add co

克隆之後一鍵修改IP刪除Mac地址修改主機名(未測試成功只是思路)

克隆之後需要修改IP、刪除Mac地址、修改主機名 $1:表示IP $2:表示主機名 1.IP 因為IP存在於/etc/sysconfig/network-scripts/ifcfg-eth0 替換IP 刪除HWADDR 2.刪除 rm -rf /etc/udev/rules

C#對資料庫的新增刪除修改

string str = "server=NO1;database=SuperMarket;integrated security=true"; SqlConnection c

mysql 建立刪除 索引 key primary key unique key 與index區別

建立:creta index test_suoying(索引的欄位名) on 表名;  刪除:drop index index_name on table_name ; 一、key與primary key區別CREATE TABLE wh_logrecord ( logre

【MYSQL筆記3】MYSQL過程式資料庫物件之儲存過程的呼叫刪除修改

mysql從5.0版本開始支援儲存過程、儲存函式、觸發器和事件功能的實現。 我們以一本書中的例題為例:建立xscj資料庫的儲存過程,判斷兩個輸入的引數哪個更大。並呼叫該儲存過程。 (1)呼叫 首先,建立儲存過程(procedure),名為xscj.compar delimiter $$ crea

【MYSQL筆記3】MYSQL過程式數據庫對象之存儲過程的調用刪除修改

重新定義 del begin 筆記 class 實現 多個 5.0 如果 mysql從5.0版本開始支持存儲過程、存儲函數、觸發器和事件功能的實現。 我們以一本書中的例題為例:創建xscj數據庫的存儲過程,判斷兩個輸入的參數哪個更大。並調用該存儲過程。 (1)調用 首先,創

相對和絕對路徑cd命令建立刪除目錄mkdirrmdirrm命令

目錄 2.6 相對和絕對路徑2.7 cd命令2.8 建立和刪除目錄mkdir/rmdir 2.9 rm命令 1、相對和絕對路徑 絕對路徑 從根開始的路徑 相對路徑 不是以根開頭的,相對當

mysql alter 語句用法,新增修改刪除欄位索引主鍵等

修改表名: ALTERTABLEadmin_user RENAMETO a_use //增加主鍵 altertable tabelname add new_field_id int(5) unsigned default 0 notnull auto_incr

Windows如何在cmd命令列中檢視修改刪除與新增設定環境變數

首先明確一點: 所有的在cmd命令列下對環境變數的修改只對當前視窗有效,不是永久性的修改。也就是說當關閉此cmd命令列視窗後,將不再起作用。永久性修改環境變數的方法有兩種:一種是直接修改登錄檔(此種方法目前沒試驗過),另一種是通過我的電腦-〉屬性-〉高階,來設定系統的環

iptables規則的檢視新增插入刪除修改

這裡只列出比較常用的引數,詳細的請檢視man iptables 1、檢視 iptables -nvL --line-number -L 檢視當前表的所有規則,預設檢視的是filter表,如果要檢視NAT表,可以加上-t NAT引數 -n 不對ip地址進行反查,加上這個

jQuery創建刪除修改html標簽

文本 ack 點擊 pre 添加 pan -c jquery end 1.在父標簽內創建標簽,新創建的標簽放在最下面 $(‘parent‘).append(son)、$(‘son‘).appendTo(‘parent‘) <div class="d"> <

在PB中插入刪除修改資料

 1.插入資料 在資料庫中插入一條資料使用INSERT語句,格式如下: INSERT INTO 表名 (欄位列表) VALUES (值列表) {USING 事務物件}; 不同的欄位使用逗號(“,”)分隔,並且不包含blob型別的欄位;值列表中不同的值之間用逗號分隔,和欄位列表

02.linux的檔案系統簡介檢視目錄ls命令切換目錄cd命令建立目錄mkdir刪除目錄rm移動重新命名mv建立檔案touch拷貝cp

整個檔案系統有一個頂層目錄:/ bin:存放一些可執行的程式(命令); boot:存放系統啟動所需要的一些檔案; dev:系統中的硬體(硬體在Linux中通過裝置檔案來標識); etc:存放配置檔案的地方; home:使用者目錄的總目錄; lib