SQL-Trigger/Cursor用法

  • 6022
  • 0

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~