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

MSSQL
SQL Server--全文本检索的应用(一)
SQL 2005的SSIS与Oracle的迁移性能
SQL优化实例:从运行30分钟到运行只要30秒
无法在SQL Server2005 Manger Studio 中录入中文的问题
SQL Artisan多表查询和统计
SQL Server数据库开发人员在应聘时经常被问到哪些问题
一个完整的SQL SERVER数据库全文索引的示例
SQL Server安全之加密术和SQL注入攻击
如何对SQL Server中的tempdb“减肥”
SQL Server 2005升级的十个步骤
如何在SQL Server开发中融入极限编程技术
SQL Server应用程序高级SQL注入(下)
SQL Server应用程序高级SQL注入(上)
SQL Server连接中的常见错误
IIS中SQL Server数据库的安全问题
SQL Server 2005区域配置和安全工具
保护 SQL Server 的十个步骤
如何利用SQL Server 2000的复制选项
SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
SQL SERVER 2005同步复制技术的应用

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


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