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
*/