SQL-Trigger/Cursor用法
本人對「SQL-Trigger/Stored Procedure」一向不是很喜歡,
可讀性低(對我而言),又無法debug(只能看有沒有結果),
但是為了資料庫可供「AP」/ 「WEB」共用,
資料連動似乎用「SQL-Trigger/Stored Procedure」比較好處理(偷懶~~)。
使用時,一般的「新增」/「刪除」都好處理,而「更新」就麻煩了,
多筆資料只有用「Cursor 」(嗯~~越來越複雜了喔)。
以下為:新增/刪除/更新的例子
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER TRIGGER [dbo].[TRI_INSERT] --Trigger名稱 ON [dbo].[TABLE] --附掛在那張Table FOR INSERT --觸發時機(INSERT/DELETE/UPDATE) AS BEGIN --SQL處理 END
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER TRIGGER [dbo].[TRI_DELETE] --Trigger名稱 ON [dbo].[TABLE] --附掛在那張Table FOR DELETE --觸發時機(INSERT/DELETE/UPDATE) AS BEGIN --SQL處理 END
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER TRIGGER [dbo].[TRI_UPDATE] -Trigger名稱 ON [dbo].TABLE --附掛在那張Table FOR UPDATE --觸發時機(INSERT/DELETE/UPDATE) AS BEGIN Declare @key nVarChar(30) --宣告要使用的暫時變數 IF @@rowcount=0 --判斷是否有更新的資料,沒有就離開 BEGIN --直接離開 RETURN; END Else BEGIN IF @@rowcount=1 --更新資料只有一列時 BEGIN--SQL處理 Select key=key From Inserted IF Exists (Select key From TABLEwhere key=@key) BEGIN--IF Exists --SQL處理 END--IF Exists END Else --更新資料多列時,需要多「CURSOR」來處理 BEGIN Declare TRI_WASH_CURSOR CURSOR For Select key From Inserted --宣告CURSOR名字及資料 Open TRI_WASH_CURSOR Fetch Next From TRI_WASH_CURSOR Into @key --將第一筆資料填入變數 While (@@FETCH_STATUS=0) --迴圈 Begin--While IF Exists (Select key From TABLEwhere key=@key) --SQL處理 BEGIN--IF Exists--SQL處理 END--IF Exists Fetch Next From TRI_WASH_CURSOR Into @key End--While Deallocate TRI_WASH_CURSOR --釋放CURSOR END END END
自我LV~