大部分資料庫語句的基本語法是相同的,但具體到的每一種資料庫,又www.cppcns.com有些不一樣,例如觸發器,db2和sql server兩種很大的不同。
例如db2的乙個觸發器:
create trigger eas.trname
no cascade before insert //插入觸發器
on eas.t_user
referencing new as n_row //把新插入的資料命名為n_row
for each row mode db2sql //每一行插入資料都出發此操作
begin atomic //開始
declare u_xtfidemp1 varchar(36); //定義變數
declare u_xtempcode1 varchar(20);
declare u_xtempcodecount int ;
declare u_xtfidempcount int ;
declare u_id1 int ;
set u_xtfidemp1=n_row.u_xtfidemp;//把新插入的資料賦值給變數
set u_xtempcode1=n_row.u_xtempcode;
set u_id1=n_row.u_id;
set u_xtempcodecount= (select count(u_xtempcode) from eas.t_user where u_xtempcode is not null and u_xtempcode=u_xtempcode1 and u_id<>u_id1);
set u_xtfidempcount=(select count(u_xtfidemp) from eas.t_user where u_xtfidemp is not null and u_xtfidemp=u_xtfidemp1 u_id<>u_id1);
if u_xtempcodecount>0 or u_xtfidempcount>0 then
signal sqlstate '80000' ('eas.t_user exceeds u_xtempcode,u_xtfidemp 插入資料時有錯誤,有重複');
end if;
end在sql server中的寫法為:
create trigger eas.trname
for insert //插入觸發器 db2 寫法 no cascade before insert
on eas.t_user
程式設計客棧//sql server沒有 把新插入的資料命名為n_row referencing new as n_row
//sql server沒有 for each row mode db2sql
begin // sql server沒有 atomic //開始
declare @u_xtfidemp1 varchar(36); //定義變數 db2 寫法 沒有@
declare @u_xtempcode1 varchar(20);
declare @u_xtempcodecount int ;
declare @u_xtfidempcount int ;
declare @u_id1 int ;
//set u_xtfidemp1=n_row.u_xtfidemp;
//set u_xtfidemp1=n_row.u_xtfidemp
//set u_xtempcode1=n_row.u_xtempcode;
-- 從inserted臨時表中獲取記錄值 //把新插入的資料賦值給變數
select @u_xtfidemp1 = u_xtfidemp,
@u_xtempcode1 = u_xtempcode,
@u_id1 = u_id
from inserted
set @u_xtempcodecount= (select count(u_xtempcode) from eas.t_user where u_xtempcode is not null and u_xtempcode=@u_xtempcode1 and u_id<>@u_id1);
set @>u_xtfidempcount=(select count(u_xtfidemp) from eas.t_user where u_xtfidemp is not null and u_xtfidemp=@u_xtfidemp1 and u_id<>@u_id1);
if@u_xtempcodecount>0 or @u_xtfidempcount>0 then
// signal sqlstate '80000' ('eas.t_user exceeds u_xwww.cppcns.comtempcode,u_xtfidemp 插入資料時有錯誤,有重複'); end if;
end可以看到雖然建立觸發器的基本語法是相同的,但具體細節又不一樣。
1定義變數的方式不一樣.
db2定義變數時,沒有要求@開頭,但是sql server定義時要求以@開頭
2對插入的臨時表叫法不一。tlocnrc
db2裡邊叫referencing new,你可以改成其他的名稱,sql server叫做inserted
3取插入的臨時表資料方法不一樣
db2裡邊使用點的方式取值,但sql server可以使用select取值,在 db2裡使用select取值就會報錯。另外 db2裡邊似乎不能
通過select的方式賦值。
4觸發器的觸發的方式不太一樣。
例如 db2裡可以規定是不是每一行都出發,但sql server裡邊沒這樣的功能,一次插入100條資料,也只觸發一次。
5觸發後的操作不一樣
同時for型別的觸發器,db2在觸發器裡沒有異常時,會插入資料或者更新資料,sql server在觸發器裡沒有異常時,是不會插
入資料的或者更新資料,除非在觸發器中寫了插入或者是更新的sql。
本文標題: 資料庫觸發器db2和sqlserver有哪些區別
本文位址:
DB2資料庫建立觸發器的實現過程
在db2資料庫操作中,我們常常會使用到觸發器,這對於我們初學者來說似乎有一點點的難度。不過沒關係,本文我們就介紹了一些db2資料庫觸發器方面的一些知識,並給出了乙個建立觸發器的例項,對於初學者來說,如果您不太懂,也可以直接套用下面的例項來完成觸發器的建立。接下來就讓我們一起來了解一下這部分內容。建乙...
DB2觸發器簡單例子
db2使用版本9.7 建立a b兩個表,a表資料有更新 刪除 插入時,將a表id記錄放入b表 1 create table a id varchar 5 name varchar 30 create table b id varchar 5 name varchar 30 2 建立觸發器 插入時觸動...
DB2控制中心建立觸發器
由於公司專案的需要,讓我這個對db2一點不通的人來寫個觸發器。沒辦法,查資料,現在終於有點小成果,記錄下。在觸發器上右擊 建立,出現下面介面 建立觸發器的名字,選擇表檢視模式,表檢視名稱 選擇已觸發操作,出現介面 由於之前選擇執行觸發操作是插入,所以只有新行相關名,在下面的已觸發的操作裡面寫觸發語句...