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

导库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]
Go
Create PROCEDURE [sp_ExportDatabase] (
  @SourceDB varchar(100)
) ----创建存储过程 sp_ExportDatabase
AS
Begin
   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)
  Begin  ----启用当前数据库中所有表的约束、触发器
    Select @Utb='Dbo.'+@Utb
    select @sql='Alter Table '+@Utb+' Enable Trigger All '+ ' ALTER TABLE '+ @Utb +' CHECK CONSTRAINT All '
    Exec sp_executesql @sql
    Fetch Ctb Into @Utb,@tid
  End
  close ctb
  DeAllocate Ctb
print 'Import database complete!'
  return 0
End
Go
Exec sp_ExportDatabase mytest  ----mytest表示源数据实体的名称

时间: 2024-11-01 06:50:16

SQL Server数据库下教你如何做导库SQL的相关文章

sql server-JS 连接 SQL SERVER 数据库 点了没有任何反应,也不报错。

问题描述 JS 连接 SQL SERVER 数据库 点了没有任何反应,也不报错. //连接数据库 function getConnection(){ var user = document.getElementById("fillqueryuser"); var port = document.getElementById("port"); var host = document.getElementById("host"); var pwd =

SQL Server数据库与其实际应用元数据介绍

以下的文章主要是介绍SQL Server数据库与其实际应用元数据,我前两天在相关网站看见SQL Server数据库与其实际应用元数据的资料,觉得挺好,就拿出来供大家分享,希望会给大家带来一些帮助在此方面. 以下的文章主要是介绍SQL Server数据库与其实际应用元数据,我前两天在相关网站看见SQL Server数据库与其实际应用元数据的资料,觉得挺好,就拿出来供大家分享,希望会给大家带来一些帮助在此方面. 我常被问到如何把驻留在物理服务器/SQL 实例上的SQL Server数据库转变为它们相

ThinkPHP连接sql server数据库

原文:ThinkPHP连接sql server数据库 亲身经历,在网上找连接sql server数据库的方法,还是不好找的,大多数都是照抄一个人的,而这个人的又写的不全,呵呵,先介绍一下我连接的方法吧.如果你是用THINKPHP连接,那么最重要的就是配置问题. 我的PHP版本是5.3,就说5.3的方法吧 1.首先要下载 php_pdo_sqlsrv_53_ts_vc9.dll php_sqlsrv_53_ts_vc9.dll 下载地址:http://share.weiyun.com/dc589f

在C#中运用SQLDMO备份和恢复SQL Server数据库

server|备份|恢复|数据|数据库     SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象)封装了Microsoft SQL Server数据库中的对象.SQLDMO是Microsoft SQL Server中企业管理器所使用的应用程序接口,所以它可以执行很多功能,其中当然也包括对数据库的备份和恢复. SQLDMO由Microsoft SQL Server自带的SQLDMO.dll提供,由于SQLDMO.dll是一个COM对象(有关C

在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库

server|备份|恢复|数据|数据库 在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库 SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象)封装了Microsoft SQL Server数据库中的对象.SQLDMO是Microsoft SQL Server中企业管理器所使用的应用程序接口,所以它可以执行很多功能,其中当然也包括对数据库的备份和恢复. SQLDMO由Microsoft SQL Server自带的

管理SQL Server数据库和应用元数据

问题 我常被问到如何把驻留在物理服务器/SQL 实例上的数据库转变为它们相应的应用程序名称.在准备计划好的服务器停机通知时,这种需要就产生了,但在我的组织内与IT经理或非技术人员沟通时,这也是有价值的.如果你不是数据库管理员或特定数据库的应用分析师,你通常会无视数据库的命名规则,而这些数据库支持着你每日依赖的应用程序.这就是为什么当需要产生时在适当的位置上由元数据库来提供转化很重要. 专家解答 大部分数据库管理员拥有某种形式的数据库元数据库,他们依赖其来跟踪范围很广的Microsoft SQL

编程-关于C#使用OleDbCommand对sql server数据库进行操作的问题

问题描述 关于C#使用OleDbCommand对sql server数据库进行操作的问题 有个编程作业是要模拟一个ATM机,我用vs2013来编写的,sql server版本是2012 数据库ATM中已经有表account(card_id , account_owner , account_password , account_sum) 怎样利用OleDbCommand来执行语句:update account set account_sum=new_sum where card_id=00000

sql server数据库保存图片或者其他小文件

原文:sql server数据库保存图片或者其他小文件 测试用sql server数据库保存图片或者其他小文件. 文件流字段用varbinary类型. static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); AsposeHelper ah = new AsposeHelper(); //ah.extractImagesToFiles()

sql server数据库的问题

问题描述 sql server数据库的问题 sql server中sql语句怎么让追加数据而不是替换数据? RT,就是不换掉原来数据的同时,追加上新添加的数据 ,谢谢大神解答 解决方案 假设表T,字段A update T set A = A + '123' where ... 你问的应该就是这个意思吧? 解决方案二: 远程连接SQL SERVER数据库,连接不上的问题PowerDesigner反向SQL Server 2000数据库问题PowerDesigner反向SQL Server 2000