大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 数据库 -> 其他相关 -> 分析数据库的一些方法

分析数据库的一些方法

时间: 2021-08-13 作者:daque

处事中,咱们偶尔须要领会一个现有软硬件的数据库构造,大略的说,即是想领会零点 1 、百般数据生存在哪个表 2 、在什么情景下,表中的数据会爆发革新 底下我把本人的本领写出来,即使您有更好的本领,请与我计划。 1、为数据库中的每一个交易表创造对应的革新表    当相映交易表的数据被革新时,触发器会把革新的典型和记载写进相映的革新表    革新表的字段除去囊括相映交易表的一切字段,还增添了三个字段    (1) 一个自增的id    (2) 革新典型(i 插入;d 简略;u 革新)    (3) 革新功夫     2、在数据库中创造一个总革新表    当任何一个交易表的数据被革新时,触发器会把革新的典型和表名写进总革新表,效率是赶快找到暂时爆发数据革新的表    总革新表有四个字段    (1) 一个自增的id    (2) 革新典型(i 插入;d 简略;u 革新)    (3) 革新的表名    (4) 革新功夫 3、为每一个交易表创造三个触发器,辨别对应插入、简略、窜改三种操纵 当交易表爆发革新时,会把革新前的记载、革新后的记载、简略的记载、插入的记载写入相映革新表 为此我特意写了两个保存进程,实用于sql server 2000,即使您的数据库不是sql server 2000,也可供您参考 为了新创造的表和触发器和数据库华夏有的表和触发器同名,沿用了加后缀本领,比方 表名为 users的表,相映的革新表为users+后缀,当后缀为_1234567时,革新表的表名为users_1234567 底下是保存进程p_analysis和p_clearup的剧本 /*========================================================================= 保存进程 p_analysis 效率 为领会创造一个总的革新表 update+后缀+后缀 为每个表创造一个革新表   原表名+后缀 为每个表创造三个触发器   tr_表名_+触发器典型(i:插入 d:简略 u:革新)+后缀 输出参数  @postfix,免得领会用表和交易表称呼反复,领会用触发器和原由触发珍视复 运用举例  exec p_analysis ’_1234567’ ============================================================================*/ create procedure p_analysis  @postfix char(8) as --尝试能否会和数据库原有的东西名(字段名)反复 if exists(select * from sysobjects where right(name,8)=@postfix) or exists(select * from syscolumns where  right(name,8)=@postfix)   print ’东西名反复,请运用各别的后缀民名’ else  begin    --为每个表创造革新记载表    declare @tablename nvarchar(128)    declare @columns varchar(8000)    declare cur insensitive cursor    for    select name from sysobjects where xtype=’u’ and status>0    open cur    fetch next from cur into @tablename    while(@@fetch_status=0)    begin         set @columns=’’  --创造革新表         exec(’select * into ’+@tablename+@postfix+’ from ’+@tablename+’ where 1=0’)  --为革新表减少三个字段         exec(’alter table ’+@tablename+@postfix + ’ add id’+@postfix+’ int identity(1,1),oprtype’+@postfix+’  char(2),oprtime’+@postfix+’ datetime default getdate()’)         --为每个交易表创造三个触发器         select @columns=@columns+’,’+name from syscolumns where id=object_id(@tablename)  --插入触发器   exec(’create trigger tr_’+@tablename+’_i’+@postfix+’ on ’+@tablename+’ for insert as’+         ’ insert update’+@postfix+@postfix+’(tablename,oprtype)’+         ’ values(’’’+@tablename+’’’,’’i’’)’+         ’ insert ’+@tablename+@postfix+’(oprtype’+@postfix+@columns+’)’+         ’ select ’’i’’’+@columns+’ from inserted’)         --简略触发器  exec(’create trigger tr_’+@tablename+’_d’+@postfix+’ on ’+@tablename+’ for delete as’+         ’ insert update’+@postfix+@postfix+’(tablename,oprtype)’+         ’ values(’’’+@tablename+’’’,’’d’’)’+         ’ insert ’+@tablename+@postfix+’(oprtype’+@postfix+@columns+’)’+         ’ select ’’d’’’+@columns+’ from deleted’)[page_break] --革新触发器         exec(’create trigger tr_’+@tablename+’_u’+@postfix+’ on ’+@tablename+’ for update as’+         ’ insert update’+@postfix+@postfix+’(tablename,oprtype)’+         ’ values(’’’+@tablename+’’’,’’u’’)’+         ’ insert ’+@tablename+@postfix+’(oprtype’+@postfix+@columns+’)’+         ’ select ’’bu’’’+@columns+’ from deleted’+         ’ insert ’+@tablename+@postfix+’(oprtype’+@postfix+@columns+’)’+         ’ select ’’au’’’+@columns+’ from inserted’)   fetch next from cur into @tablename    end    close cur    deallocate cur    --创造总记载革新表    exec(’create table update’+@postfix+@postfix+’(id numeric(18,0) identity(1,1),tablename varchar(256),oprtype  char(1),oprtime datetime default getdate())’) end go /*================================================================== 保存进程 p_clearup 效率:废除兴建的表\触发器 输出参数: @postfix 默许值 _1234567 运用例子: 运用举例 exec p_clearup ’_1234567’ ====================================================================*/ create procedure p_clearup @postfix char(8)=’_1234567’ as --简略总革新表    exec(’if exists (select * from sysobjects where name =’’update’+@postfix+@postfix+’’’ and type=’’u’’)’+         ’drop table update’+@postfix+@postfix)    declare @tablename nvarchar(128)    declare cur cursor    for    select name from sysobjects where xtype=’u’ and status>0    open cur    fetch next from cur into @tablename    while(@@fetch_status=0)    begin  --简略革新表         exec(’if exists (select * from sysobjects where name =’’’+@tablename+@postfix+’’’ and type=’’u’’)’+              ’drop table ’+@tablename+@postfix)  --简略插入触发器          exec(’if exists (select * from sysobjects where name =’’tr_’+@tablename+’_i’+@postfix+’’’ and type=’’tr’’)’+      ’drop trigger tr_’+@tablename+’_i’+@postfix)  --简略简略触发器          exec(’if exists (select * from sysobjects where name =’’tr_’+@tablename+’_d’+@postfix+’’’ and type=’’tr’’)’+       ’drop trigger tr_’+@tablename+’_d’+@postfix)  --简略革新触发器          exec(’if exists (select * from sysobjects where name =’’tr_’+@tablename+’_u’+@postfix+’’’ and type=’’tr’’)’+      ’drop trigger tr_’+@tablename+’_u’+@postfix)    fetch next from cur into @tablename    end    close cur    deallocate cur go

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.