通過儲存過程 建立動態觸發器

2021-05-27 10:02:42 字數 1995 閱讀 2158

/*

author :bean

create date :2011-08-12

問題描述1 :很多時候我們乙個模板會有很多的**,例如care 專案,一共有29張表,想刪除一條單據,

那麼我們要寫29條delete語句

問題描述2 :如果不寫觸發器,很多時候只是_1表的資料被刪除了,剩下的_2,_3,_4...表的資料還會存在資料庫裡浪費資源

功能描述 :主要用於landa資料庫單據刪除,當刪除_1表後,後面帶動的_2,_3,_4...表相同vguid的單據會被自動刪除

優點 :快捷,方便

使用案例 :exec porc_addtrigger '表名_1'

*/if object_id('porc_addtrigger','p') is not null drop proc porc_addtrigger

gocreate proc porc_addtrigger

@tb_name varchar(50)

asbegin

begin transaction

begin try

if right(@tb_name,2)!='_1'

raiserror('table name should end with "_1"',16,1)

else

begin

declare

@sql varchar(max)

set @sql='

create trigger tr_'+left(@tb_name,len(@tb_name)-2)+'

on '+@tb_name+'

for delete

asbegin

declare @tmp varchar(50),

@i numeric(38,0),

@table varchar(50),

@sql varchar(max),

@vguid uniqueidentifier

set @tmp='+''''+left(@tb_name,len(@tb_name)-1)+''''+'

set @table=''csempl_2''

set @vguid=newid()

set @i=2

select @vguid=vguid from deleted

while 1=1

begin

set @table=@tmp+convert(varchar(10),@i)

if object_id(@table,''u'') is not null

begin

set @sql=''delete from '' + @table +'' where vguid ='''+'+''''''''+'+' convert(varchar(50),@vguid)+'+''''''''''+'

exec(@sql)

set @i=@i+1

end else

break;

endend'

exec(@sql)

endcommit transaction

end try

begin catch

rollback transaction

declare @error_message varchar(1000)

set @error_message= 'error_nuber :'+convert(varchar(5),error_number())+char(13)+

'error_line :'+convert(varchar(5),error_line())+char(13)+

'error_message:'+convert(varchar(50),error_message())

raiserror(@error_message,16,1)

end catch

end

觸發器 儲存過程

1 為productsales資料庫中的產品表建立乙個名為update pno的update觸發器,該觸發器的作用是禁止更新產品表中的 productname 欄位的內容。並用update語句修改產品表中第一條記錄為 1 hp1500 印表機 2000 要求顯示 不能修改產品名稱 的警告資訊。cre...

儲存過程 觸發器

觸發器主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名字而被直接呼叫。當對某一表進行諸如update insert delete 這些操作時,就會自動執行觸發器所定義的sql 語句,從而確保對資料的處理必須符合由這些sql 語句所定義的規則。觸發器的主要作用就是其能夠實現由主鍵和外來鍵...

sql 觸發器 儲存過程 觸發器(3 3)

1 what?什麼是觸發器 trigger 前兩篇介紹了儲存過程,儲存過程可以理解為sql語句集。那麼觸發器就是一種特殊的儲存過程,也就是一群特殊的sql語句集。特殊在哪?從上文得知,儲存過程是依賴名字才被呼叫的。不僅是儲存過程,我們常用的方法等,大部分也是先知道名字,才能去使用。就像吃飯採用訂外賣...