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

简介: GO /****** 对象: StoredProcedure [dbo].[pro_GenerateTrigger] 脚本日期: 08/13/2012 10:10:16 ******/ IF EXISTS (SELECT * FROM sys.
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 

*/

相关文章
|
4天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
4天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
10天前
|
SQL 关系型数据库 MySQL
mysql sql语句删除一个库下的所有表
mysql sql语句删除一个库下的所有表
|
1天前
|
存储 SQL 关系型数据库
MySQL存储过程_触发器_游标——Baidu Comate
MySQL存储过程_触发器_游标——Baidu Comate
7 0
|
2天前
|
SQL Java 数据库连接
MyBatis SQL 批量更新(代码➕案例)
MyBatis SQL 批量更新(代码➕案例)
6 0
|
4天前
|
存储 关系型数据库 MySQL
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(4)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
4天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(3)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
5天前
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用合集之sql代码中支持插入jinja语法语句吗
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
9天前
|
关系型数据库 MySQL 数据库
MySQL数据库——触发器-案例(Insert类型、Update类型和Delete类型)
MySQL数据库——触发器-案例(Insert类型、Update类型和Delete类型)
14 0
|
9天前
|
SQL 存储 关系型数据库
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
16 1