CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

如何仅备份库中表的数据

楼主tangt(爱学习......)2006-07-04 18:17:00 在 MS-SQL Server / 疑难问题 提问

数据不多,表很多。  
  我现在只需要表里的数据,不需要日志,系统信息等等,  
  如何方便快捷的导出指定库中表的数据,不要msdb等系统信息。谢谢 问题点数:50、回复次数:10Top

1 楼fcuandy(了此残生.)回复于 2006-07-04 18:21:05 得分 10

在外部程序(指非查询分析器)中使用SQLDMO,很方便。几条语句就可以了。具体写法就不写了,楼主找找资料看看  
   
  当然,不怕麻烦也可以在查询分析器中用通过系统存储过程调用COM的方法调用SQLDMO来实现。Top

2 楼tangt(爱学习......)回复于 2006-07-04 18:24:21 得分 0

哦,忘了说了,不是备在其他库里,是文件里,更直白的说,txt里  
  fcuandy   能否给各关键字,也好查阿Top

3 楼being21(民谣)回复于 2006-07-04 19:04:24 得分 5

帅哥,简单的问问,如果可以备份到Access或者EXCEL的话,可以直接导出数据。  
  这个我会,如果直接的导出到txt   哈哈,没有想过!!!你厉害!如果只是想直接的看,建议用access,我就是这样的,非常的好用。Top

4 楼chuifengde(树上的鸟儿)回复于 2006-07-04 22:16:09 得分 5

导到access怎么导呢  
   
   
   
  ====CSDN   小助手   V2.5   2005年11月05日发布====  
  CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件  
  界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx  
  下载:http://szlawbook.com/csdnv2  
   
  Top

5 楼YANG_1994(1994的巴喬)回复于 2006-07-05 14:34:39 得分 5

可以直接把数据以.tet文档的格式导出来的Top

6 楼tangt(爱学习......)回复于 2006-07-10 16:14:39 得分 0

应该能解决吧?怎么没人吭声呢?  
  单个表可以手动倒,几百张都手动,是不是有点***了Top

7 楼joyceanne(SQL桥)回复于 2006-08-03 17:36:33 得分 10

单表导出,只能用手工的方法.(不知道为什么MS不加单表备份的功能,SQL2005也没有这种功能,实际工作中却时有发生)  
  把这些导出操作写成脚本,以后可以用一个作业来调用,就不用每次都手工做了.Top

8 楼gahade(与君共勉)回复于 2006-08-03 18:37:11 得分 10

老大的语句:  
   
   
  CREATE   PROC   sp_CopyObject  
  @S_DatabaseName   sysname,                           --要复制对象的源数据库名  
  @D_DatabaseName   sysname=NULL,             --复制对象的目标数据库名,不指定则为当前库名  
  @TypeList                 nvarchar(50)=NULL       --以逗号分隔的对象类型列表,只能是P/V/TR/IF/TF/FN之一或者是它们的组合.不指定是所有对象  
  AS  
  IF   DB_ID(@S_DatabaseName)   IS   NULL  
  BEGIN  
  RAISERROR('源数据库   "%s"   不存在',12,16,@S_DatabaseName)  
  RETURN  
  END  
  IF   DB_ID(@D_DatabaseName)   IS   NULL   SET   @D_DatabaseName=DB_NAME()  
   
  DECLARE   @sql   nvarchar(4000)  
  --处理对象类型列表  
  SET   @sql=N''  
  SELECT   @sql=@sql+N','+QUOTENAME(xtype,N'''')  
  FROM(  
  SELECT   xtype=N'P'     UNION   ALL   SELECT   N'IF'   UNION   ALL  
  SELECT   xtype=N'V'     UNION   ALL   SELECT   N'TF'   UNION   ALL  
  SELECT   xtype=N'TR'   UNION   ALL   SELECT   N'FN'  
  )a   WHERE   CHARINDEX(N','+xtype+N',',N','+@TypeList+N',')>0  
  IF   @@ROWCOUNT=0   OR   @sql=''  
  SET   @TypeList='N''P'',N''V'',N''TR'',N''IF'',''TF'',''FN'''  
  ELSE  
  SET   @TypeList=STUFF(@sql,1,1,N'')  
   
  --获取要复制对象(存储,视图,触发器)的数据  
  CREATE   TABLE   #(name   sysname,xtype   char(2),number   smallint,colid   smallint,text   nvarchar(4000))  
  SET   @sql=N'  
  INSERT   #(name,xtype,number,colid,text)  
  SELECT   o.name,o.xtype,m.number,m.colid,m.text  
  FROM   '+QUOTENAME(@S_DatabaseName)+N'.dbo.sysobjects   o,'  
  +QUOTENAME(@S_DatabaseName)+N'.dbo.syscomments   m  
  WHERE   o.id=m.id  
  AND   m.encrypted=0  
  AND   o.xtype   IN('+@TypeList+N')  
  AND   o.status>=0'  
  EXEC   sp_executesql   @sql  
   
  DECLARE   tb   CURSOR   LOCAL  
  FOR  
  SELECT   N'USE   '+QUOTENAME(@D_DatabaseName)+N'  
  DECLARE   @name   sysname,@number   smallint  
  SELECT   @name='+QUOTENAME(name,N'''')+N',  
  @number='+CAST(number   as   varchar)+N'  
  DECLARE   @1   nvarchar(4000),@2   nvarchar(4000),@3   nvarchar(4000),@4   nvarchar(1000)  
  SELECT   @1=N'''',@2=N'''',@3=N''''  
  SELECT   @1=@1+N'',@''+RTRIM(colid)+N''   nvarchar(4000)'',  
  @2=@2+N'',@''+RTRIM(colid)  
  +N''=CASE   colid   WHEN   ''+RTRIM(colid)  
  +N''   THEN   text   ELSE   @''+RTRIM(colid)+N''   END'',  
  @3=@3+N''+@''+RTRIM(colid)  
  FROM   #  
  WHERE   name=@name   AND   number=@number  
  ORDER   BY   colid  
  SELECT   @1=STUFF(@1,1,1,N''''),  
  @2=STUFF(@2,1,1,N''''),  
  @3=STUFF(@3,1,1,N''''),  
  @4=N''   WHERE   name=''+QUOTENAME(@name,N'''''''')  
  +N''   AND   number=''+RTRIM(@number)  
  IF   @NUMBER<2   AND   EXISTS(SELECT   *   FROM   sysobjects   WHERE   name=@name   AND   xtype='  
  +QUOTENAME(xtype,N'''')+N')   DROP   '+CASE   xtype  
  WHEN   N'P'   THEN   N'PROC'  
  WHEN   N'V'   THEN   N'VIEW'  
  WHEN   N'TR'   THEN   N'TRIGGER'  
  ELSE   N'FUNCTION'   END  
  +N'   '+QUOTENAME(name)+N'  
  EXEC(N''DECLARE   ''+@1+''  
  SELECT   ''+@2+''   FROM   #   ''+@4+N''  
  EXEC(''+@3+'')'')'  
  FROM   #  
  GROUP   BY   name,xtype,number  
  OPEN   tb  
  FETCH   tb   INTO   @sql  
  WHILE   @@FETCH_STATUS=0  
  BEGIN  
  EXEC   sp_executesql   @sql  
  FETCH   tb   INTO   @sql  
  END  
  CLOSE   tb  
  DEALLOCATE   tb  
  Top

9 楼wgqqgw(小强)回复于 2006-08-03 18:38:40 得分 5

做个DTS咯,可以导出到Excel/Access/TXT……啥都行了,虽然做的时候比较痛苦(楼主好像有很多表,哈哈……)做好了以后调度它每天自动运行就行了啦。如果想再把导出来的文件加工一下,压缩呀、加日期呀什么的就配合着写些简单的批处理啦。  
  Top

10 楼tangt(爱学习......)回复于 2006-09-07 16:22:18 得分 0

算了吧,沉了这么久,   自己写一个导出程序了。  
  结贴Top

相关问题

关键词

得分解答快速导航

  • 帖主:tangt
  • fcuandy
  • being21
  • chuifengde
  • YANG_1994
  • joyceanne
  • gahade
  • wgqqgw

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo