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

MSSQL
将代码页从SQL Server 7.0改变到SQL Server 2000
浅析SQL SERVER一个没有公开的存储过程
使用存储过程时一个错误的解决方法
执行一个安全的SQL Server安装
SQL导出到MYSQL的简单方法
SQL Server 7六种数据移动方法
数据库升迁从sqlserver6.5到sqlserver2000
用SQL 2000创建用户化XML流
解决SQL Server 2000之日志传送功能
保持多台服务器数据的一致性
将ACCESS转化成SQL2000需要注意的几个问题
一次特殊的SQL Server安装奇遇
实现上千万条数据的分页显示
使用用于SQL Server的IIS虚拟目录管理实用工具
SQL Server连接ACCESS数据库的实现
使用SQL Server数据转换服务升迁Access数据库
SQLServer和Access、Excel数据传输简单总结
XML文件导入SQL Server 2000
在视图中使用ORDER BY子句
内嵌或嵌入SQL和存储过程之对比

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


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