当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server数据库下教你如何做导库SQL

MSSQL
无数据库日志文件恢复数据库方法两则(一)
SQLServer编写存储过程小工具(一)
SQLServer编写存储过程小工具(二)
SQLServer编写存储过程小工具(三)
Eclipse+JBoss+MySQL开发环境设置
MYSQL使用简述
一些有用的sql语句实例
枚举SQLServer的实例
SQLServer应用程序中的高级SQL注入
SQL Server数据库超级管理员账号防护知识
讲解如何实现互联网上数据库的安全
SQL 2005数据库转到SQL 2000的步骤讲解
带你轻松接触数据库生成xml的两个方法
用MS SQL Reporting Services生成报表
保护SQL Server的十个步骤
关于SQL SERVER的一些安全问题
SQL Server 2008数据库中使用表值参数
SQL Server 2005中用存储过程实现搜索功能
MS SQL数据库置疑解决办法
SQL Server密码管理的六个危险判断

MSSQL 中的 SQL Server数据库下教你如何做导库SQL


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 107 ::
收藏到网摘: n/a

导库SQL -- 适用于sql server

在企业信息化建设过程中,数据库实体做为存放企业运营数据的仓库,具有至高重要的地位。

为防止数据丢失,事前预防是很关键的,诸如数据库定期备份、磁盘阵列、集群解决方案等等。

但是一旦发生数据丢失或是损坏的现象,而且不能通过正常的修复手段来处理,则可以通过导库来尝试一下。

国产的软件包括k/3,u8 等等,都有类似管理数据库的工具,管理工具中提供新建数据库的功能,新建的同类(指管理工具中提供的类别)数据库实体(国产软件通常称之为“账套”)有相同的表结构。因此,如果账套损坏,且无法修复的,可以新建一同类型的账套实体,通过下面的导库语句把被损坏的账套的数据导入新建账套中。

下面的语句提供了一个比sql server DTS导入导出更加灵活的工具。不过需要大家仔细理解才能运用的得心应手哈!!

----该存储过程建立在新帐套中,并在新账套中执行

if Exists(select * from sysobjects where name=N'sp_ExportDatabase' And Xtype='P') Drop PROCEDURE [sp_ExportDatabase] GoCreate PROCEDURE [sp_ExportDatabase] ( @SourceDB varchar(100)) ----创建存储过程 sp_ExportDatabaseASBegin Set NoCount On Declare @Utb sysname ------用户表名 Declare @ColName sysname ------列名 Declare @tid int ------用户表的ID Declare @sql nvarchar(3000)------存放拼出的sql Declare @len int --定义游标取回用户建立的表 sELECT @SourceDB=@SourceDB+'.' Declare Ctb Cursor For Select name,id From sysobjects Where xtype ='U' ----如果在导库过程中因某表存在错误而导致导库过程停止 ,则可以尝试修复此表。 ----如果此表不是很重要、或是此表无法修复,则可以在此加入条件 And name in (tablename1,tablename2,……) ------tablename1,tablename2 表示不能修复的表的名字 Order by name Open Ctb Fetch Ctb Into @Utb,@tid While (@@FETCH_STATUS=0) Begin ----禁用当前数据库中所有表的约束、触发器 Select @Utb='Dbo.'+@Utb Select @SQL='Alter Table '+@Utb+' Disable Trigger All; '+ ' ALTER TABLE '+ @Utb +' NOCHECK CONSTRAINT All; ' exec ( @SQL) Fetch Ctb Into @Utb,@tid End close ctb Open Ctb Fetch Ctb Into @Utb,@tid While (@@FETCH_STATUS=0) Begin Select @Utb='Dbo.'+@Utb exec (' Delete ' + @Utb) Set @sql='' Declare Clu Cursor For Select name From syscolumns Where id=@tid And iscomputed=0 and xtype<>189 Open Clu Fetch Clu Into @ColName While (@@FETCH_STATUS=0) Begin ----把列名以逗号隔开,拼成字符串 Set @sql=@sql+ @ColName + ',' Fetch Clu Into @ColName End Close Clu DeAllocate Clu ----构造字符串 Set @len=Len(@sql) If @len>0 Begin ----把源数据库中的表导入到当前数据库中 Select @sql=left(@sql,@len-1) Set @sql='Insert Into '+ @Utb + ' ('+@sql+') '+' Select '+@sql+' From ' + @SourceDB+ @Utb print 'Importing Table : ' +@utb+'...' If Exists (Select name From syscolumns Where id=@tid and status=0x80) begin Select @SQl='Set IDENTITY_INSERT '+ @Utb + ' ON' + ' Delete ' + @Utb+' '+@sql print @sql end Else Select @SQl=@sql Exec ( @sql) If Exists (Select name From syscolumns Where id=@tid and status=0x80) Exec( 'Set IDENTITY_INSERT '+ @Utb + ' Off') print 'Importing Table : ' +@utb+' complete' End Fetch Next From Ctb Into @Utb,@tid End Close Ctb Open Ctb Fetch Ctb Into @Utb,@tid While (@@FETCH_STATUS=0) Begi