/*
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
go
create Proc Porc_AddTrigger
@TB_name varchar(50)
as
Begin
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
as
Begin
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;
end
End'
Exec(@sql)
End
Commit 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