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

MSSQL
精细讲述SQL Server数据库备份多种方法
让SQL Server也能使用2G以上内存
SQL Server数据库崩溃恢复之法
创建区分大小写的SQL Server 2000实例
SQL Server中易混淆的数据类型
如何优化SQL Server数据库查询
使用Robot连接SQL的例子
如何让你的SQL运行得更快
对Sql Server中的表添加级联更新和级联删除
常用SQL语句书写技巧
SQL Server与Oracle实施成本上的差异
解析SQL Server的数据类型 BLOB
SQL Server数据库和XML标识语言的集成
SQLServer 数据库还原和孤立用户的解决办法
SQL Server 2000/2005 分页SQL
Sql Server锁表
SQLServer2005实现远程数据库备份
SQL精妙语句
SQL Server 2008的逻辑查询处理步骤
如何让你的SQL运行得更快

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 35 ::
收藏到网摘: 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