16
2012
08

sql生成(mssql对于表的delete和update做备份的触发器)代码的存储过程


GO  

/****** 对象:  StoredProcedure [dbo].[pro_GenerateTrigger]    脚本日期: 08/13/2012 10:10:16 ******/  

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pro_GenerateTrigger]') AND type in (N'P', N'PC'))  

DROP PROCEDURE [dbo].[pro_GenerateTrigger]  

  

SET ANSI_NULLS ON  

GO  

SET QUOTED_IDENTIFIER ON  

GO  

/*****************************************************  

** DECRIPTION: sql生成(mssql对于表的delete和update做备份的触发器)代码的存储过程  

** VERSION      AUTH          DATE          Defect No           DESC  

** --------  ------------  ------------  -----------------   ------------------------------  

** V000.0.1    pukuimin     08/04/2012                          新建程序  

** --------  ------------  ------------  -----------------   -------------------------------  

*******************************************************/  

create procedure [dbo].[pro_GenerateTrigger](  

                    @TableName NVARCHAR(200) ---表名  

)  

--WITH ENCRYPTION ---加锁  

as  

begin  

DECLARE @allColumns VARCHAR(3000) --所有列名  

DECLARE @ConstructParams     VARCHAR(8000)  --构造参数  

DECLARE @ConstructGetValue     VARCHAR(8000) --构造赋值  

DECLARE @FieldPropertys     VARCHAR(8000) --属性和字段  

DECLARE @Uni_Primary     VARCHAR(100) --唯一键或主键  

SELECT @ConstructParams = '',@FieldPropertys='',@ConstructGetValue='',@allColumns='',@Uni_Primary=''  

  

if isnull(@TableName,'')=''  

begin  

    print '表名不能为空!'  

    return 0  

end   

  

set @Uni_Primary=dbo.fun_get_unique_column(@TableName)  

if(@Uni_Primary='') set @Uni_Primary=dbo.fun_get_PrimaryKey(@TableName)  

if(@Uni_Primary='') set @Uni_Primary='id'  

  

SELECT   

@allColumns=@allColumns+COLUMN_NAME+','  

FROM INFORMATION_SCHEMA.COLUMNS  

WHERE TABLE_NAME = @TableName   

set @allColumns=LEFT(@allColumns,LEN(@allColumns)-1)  

print 'SET ANSI_NULLS ON'  

print 'GO'  

print 'SET QUOTED_IDENTIFIER ON'  

print 'GO'  

print 'IF  EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N''[dbo].[trigger_delete_update_'+@TableName+']''))'  

print 'DROP TRIGGER [dbo].[trigger_delete_update_'+@TableName+']'  

print 'GO'  

print 'CREATE TRIGGER [trigger_delete_update_'+@TableName+']'  

print 'on '+@TableName  

print 'FOR DELETE,UPDATE'  

print 'AS'  

    print dbo.fun_get_tabspace(1)+'BEGIN'  

        print dbo.fun_get_tabspace(2)+'IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[stuinfo_bak]'') AND type in (N''U''))'  

            print dbo.fun_get_tabspace(3)+'BEGIN'  

                print dbo.fun_get_tabspace(4)+'select * into ['+@TableName+'_bak] from [stuinfo] where  1 = 2'  

            print dbo.fun_get_tabspace(3)+'END'  

        print dbo.fun_get_tabspace(2)+'SET IDENTITY_INSERT ['+@TableName+'_bak] ON'  

        print dbo.fun_get_tabspace(2)+'INSERT INTO ['+@TableName+'_bak]('+@allColumns+') select '+@allColumns+' from deleted'  

        print dbo.fun_get_tabspace(2)+'SET IDENTITY_INSERT ['+@TableName+'_bak] OFF'  

    print dbo.fun_get_tabspace(1)+'END'  

end  

/*  

exec [pro_GenerateTrigger] 'stuinfo'  

select row_number() over(order by id asc) row_num,* from stuinfo_bak   

*/  




版权声明:
作者:真爱无限 出处:http://www.pukuimin.top 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
« 上一篇下一篇 »

相关文章:

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。