淺談觸發器使用
來源:程序員人生 發布時間:2014-11-10 08:15:24 閱讀次數:2842次
個人重構時看有人登錄時使用觸發器,當時我是用存儲進程+事務實現的,也沒有進1步思考,表面理解觸發器就是由1個事件觸發另外一個事件,存儲進程也是封裝了1組sql語句,再加上事務的1致性原則,也能夠到達1個動作的完全性。現在牛腩中又觸及到這個東西,存在即公道,也彌補1下學習中的空白,主要總結1下如何使用及和存儲進程的不同。
1、建立:
1、 觸發器是特殊的存儲進程,只不過它的履行不是由程序調用,也不是手工啟動,而是由事件來觸發即Insert、Update、Delete這些動作,比如牛腩中刪除新聞種別時,要刪除種別下面的新聞及評論,這里在新聞種別下面建立刪除新聞種別觸發器,當履行時,還會包括1個或兩個測試表,稱之為inserted表和deleted表
(這里是deleted
),用于保存目標更新、插入或刪除的數據信息,雖然不能直接修改測試表中的數據,但能通過SELECT語句,來檢測INSERT,UPDATE或DELETE的結果。觸發器的創建:
<span style="font-size:18px;">--====================================
-- Author:李立平
--Date:2014⑴0⑺
--Description:刪除種別時,刪除響應新聞和評論
--====================================
ALTER TRIGGER [dbo].[trigCategoryDelete]
on [dbo].[T_Category]
instead of Delete
AS
BEGIN
declare @caID INT
SELECT @caID =id from deleted
--刪除評論
delete T_Comment where newsid in(select newsid from T_News where caID=@caID)
--刪除新聞
delete T_News WHERE caID=@caID
--刪除種別
DELETE T_Category where id=@caID
END</span>
2、和存儲進程相比:
首先建立時,我選擇http://www.vxbq.cn/db/―可編譯性―http://www.vxbq.cn/db/觸發器,發現履行后并沒有建好的觸發器,后來才知道原來在每張表的下面,但第2張圖上面建好的存儲進程履行后就在http://www.vxbq.cn/db/的可編譯性下面。


2、使用(在D層代碼中體現):
存儲進程在使用時,用戶通過指定存儲進程的名字并給出參數(如果該存儲進程帶有參數)來履行它
,而觸發器就是普通的sql語句,在履行這個事件時調用觸發器這個操作。
1、存儲進程(刪除新聞功能):
<span style="font-size:18px;">/// <summary>
/// 刪除新聞
/// </summary>
/// <param name="id">新聞id</param>
/// <returns>布爾</returns>
public bool Delete(string id)
{
bool flag = false;
string cmdText = "NewsDelete";
SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@id", id) };
int res = sqlhelper.ExecuteNonQuery(cmdText, paras, CommandType.StoredProcedure);
if (res>0)
{
return true;
}
return flag;
}</span>
2、觸發器(刪除種別功能):
/// <summary>
/// 刪除新聞種別,連同刪除新聞及新聞評論,用到觸發器
/// </summary>
/// <param name="id">新聞id</param>
/// <returns>布爾</returns>
public bool Delete(string id)
{
bool flag = false;
string cmdText = "delete T_Category where id=@id";
SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@id",id ) };
int res = sqlhelper.ExecuteNonQuery(cmdText, paras, CommandType.Text);
if (res>0)
{
return true;
}
return flag;
}
總結:我們要去嘗試新事物,公道使用它們給我們帶來的便利。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈