資料庫觸發器DB2和SqlServer有哪些區別

2022-09-21 23:27:11 字數 3003 閱讀 5102

大部分資料庫語句的基本語法是相同的,但具體到的每一種資料庫,又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一點不通的人來寫個觸發器。沒辦法,查資料,現在終於有點小成果,記錄下。在觸發器上右擊 建立,出現下面介面 建立觸發器的名字,選擇表檢視模式,表檢視名稱 選擇已觸發操作,出現介面 由於之前選擇執行觸發操作是插入,所以只有新行相關名,在下面的已觸發的操作裡面寫觸發語句...