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

在韩留学生2014

在韩留学生2014

2016-01-29 16:04

SQL Server数据库下教你如何做导库SQL,SQL Server数据库下教你如何做导库SQL

导库SQL -- 适用于sql server

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

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

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

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

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

下面的语句提供了一个比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 @len0               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      
展开更多 50%)
分享

猜你喜欢

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

SQLServer
SQL Server数据库下教你如何做导库SQL

如何转移SQL SERVER数据库

SQLServer
如何转移SQL SERVER数据库

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL Server数据库检修

SQLServer
SQL Server数据库检修

如何远程连接SQL Server数据库

MySQL mysql数据库
如何远程连接SQL Server数据库

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

SQL Server数据库导入MySQL数据库体验

MySQL mysql数据库
SQL Server数据库导入MySQL数据库体验

SQL Server数据库技术(02)

SQLServer
SQL Server数据库技术(02)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《海岛奇兵》攻略之新版削弱野人如何生存

《海岛奇兵》攻略之新版削弱野人如何生存

SQL Server 对文件内容进行全文检索的查询

SQL Server 对文件内容进行全文检索的查询
下拉加载更多内容 ↓