1)创建日志表
一个一个建表是一件烦躁的事,而且还容易出错。那么,以下存储过程就能批量建表了,还添加了LogCreateDate、LogDefaultFlag、LogPTID这3个字段。值得注意的是,创建表结构可以用以下语句“SELECT * Into tableName_Log FROM tableName”。如果只需要复制表结构,那就插入一行,再删除就是。
SQL里面实现遍历数据集不方便,不想用游标,于是采用了以下方式。具体存储过程如下:
USE [NbShop] GO /****** Object: StoredProcedure [dbo].[CreateLogTable] Script Date: 07/02/2011 12:54:32 ******/ SET ANSI_NULLS _disibledevent=>
2)删除日志表
在开发过程中,难免会对字段进行更改。于是删除的存储过程也得有。具体代码如下:
USE [NbShop] GO /****** Object: StoredProcedure [dbo].[DropLogTable] Script Date: 07/02/2011 12:54:29 ******/ SET ANSI_NULLS _disibledevent=> 以上语句值得注意的是在查找以“_Log”结尾的表名的搜索条件,需要加上“escape '\'”。
3)记录日志
日志表有了,还得记录日志呢。为每个表写个存储过程会过于繁琐,而且改动了就得跟着改动。就是码农也吃不消。于是有了以下存储过程,该存储过程定义了7个参数,允许传入存储过程、
表名、Where条件等。具体如下:
USE [NbShop] GO /****** Object: StoredProcedure [dbo].[RecordLog] Script Date: 07/02/2011 12:54:07 ******/ SET ANSI_NULLS _disibledevent=>0) BEGIN select @InsertSQL=@InsertSQL+' AND ObjectID='''+@ObjectID+''' ' Select @UpdateSQL=@UpdateSQL+' AND ObjectID='''+@ObjectID+''' ' END ELSE BEGIN select @InsertSQL=@InsertSQL+' WHERE ObjectID='''+@ObjectID+''' ' Select @UpdateSQL=@UpdateSQL+' WHERE ObjectID='''+@ObjectID+''' ' END Select @WhereCount=@WhereCount+1 END --------------判断是否存在ShopID列(门店ID)----------------------------- if @ObjectID IS NOT NULL AND col_length( @tableName+' ', 'ShopID ') is not null BEGIN IF(@WhereCount>0) BEGIN select @InsertSQL=@InsertSQL+' AND ShopID='''+@ObjectID+''' ' Select @UpdateSQL=@UpdateSQL+' AND ShopID='''+@ObjectID+''' ' END ELSE BEGIN select @InsertSQL=@InsertSQL+' WHERE ShopID='''+@ObjectID+''' ' Select @UpdateSQL=@UpdateSQL+' WHERE ShopID='''+@ObjectID+''' ' END Select @WhereCount=@WhereCount+1 END --------------判断是否存在PTID列(模版ID)----------------------------- if @PTID IS NOT NULL AND col_length( @tableName+' ', 'PTID ') is not null BEGIN IF(@WhereCount>0) BEGIN select @InsertSQL=@InsertSQL+' AND PTID='''+@PTID+''' ' END ELSE BEGIN select @InsertSQL=@InsertSQL+' WHERE PTID='''+@PTID+''' ' END Select @WhereCount=@WhereCount+1 END --------------判断是否存在PhasesID列(阶段ID)----------------------------- if @PhasesID IS NOT NULL AND col_length( @tableName+' ', 'PhasesID ') is not null BEGIN IF(@WhereCount>0) BEGIN select @InsertSQL=@InsertSQL+' AND PhasesID='''+@PhasesID+''' ' END ELSE BEGIN select @InsertSQL=@InsertSQL+' WHERE PhasesID='''+@PhasesID+''' ' END Select @WhereCount=@WhereCount+1 END print @UpdateSQL exec (@UpdateSQL) print @InsertSQL Exec (@InsertSQL) END END 存储过程有了,再配个XML,根据参数把TableName配进去,再加点可配的自定义属性什么的,例如:
这样,就一劳永逸了。
最新评论