SQL语句导入导出大全

  SQL语句导入导出大全    
   
  /*******     导出到excel    
  EXEC   master..xp_cmdshell   ’bcp   SettleDB.dbo.shanghu   out   c:/temp1.xls   -c   -q   -S"GNETDATA/GNETDATA"   -U"sa"   -P""’    
   
  /***********     导入Excel    
  SELECT   *    
  FROM   OpenDataSource(   ’Microsoft.Jet.OLEDB.4.0’,    
      ’Data   Source="c:/test.xls";User   ID=Admin;Password=;Extended   properties=Excel   5.0’)...xactions    
   
   
  SELECT   cast(cast(科目编号   as   numeric(10,2))   as   nvarchar(255))+’ ’   转换后的别名    
  FROM   OpenDataSource(   ’Microsoft.Jet.OLEDB.4.0’,    
      ’Data   Source="c:/test.xls";User   ID=Admin;Password=;Extended   properties=Excel   5.0’)...xactions    
   
  /**   导入文本文件    
  EXEC   master..xp_cmdshell   ’bcp   "dbname..tablename"   in   c:/DT.txt   -c   -Sservername   -Usa   -Ppassword’    
   
  /**   导出文本文件    
  EXEC   master..xp_cmdshell   ’bcp   "dbname..tablename"   out   c:/DT.txt   -c   -Sservername   -Usa   -Ppassword’    
  或    
  EXEC   master..xp_cmdshell   ’bcp   "Select   *   from   dbname..tablename"   queryout   c:/DT.txt   -c   -Sservername   -Usa   -Ppassword’    
   
  导出到TXT文本,用逗号分开    
  exec   master..xp_cmdshell   ’bcp   "库名..表名"   out   "d:/tt.txt"   -c   -t   ,-U   sa   -P   password’    
   
   
  BULK   INSERT   库名..表名    
  FROM   ’c:/test.txt’    
  WITH   (    
          FIELDTERMINATOR   =   ’;’,    
          ROWTERMINATOR   =   ’/n’    
  )    
   
   
  --/*   dBase   IV文件    
  select   *   from    
  OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’    
  ,’dBase   IV;HDR=NO;IMEX=2;DATABASE=C:/’,’select   *   from   [客户资料4.dbf]’)    
  --*/    
   
  --/*   dBase   III文件    
  select   *   from    
  OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’    
  ,’dBase   III;HDR=NO;IMEX=2;DATABASE=C:/’,’select   *   from   [客户资料3.dbf]’)    
  --*/    
   
  --/*   FoxPro   数据库    
  select   *   from   openrowset(’MSDASQL’,    
  ’Driver=Microsoft   Visual   FoxPro   Driver;SourceType=DBF;SourceDB=c:/’,    
  ’select   *   from   [aa.DBF]’)    
  --*/    
   
  /**************导入DBF文件****************/    
  select   *   from   openrowset(’MSDASQL’,    
  ’Driver=Microsoft   Visual   FoxPro   Driver;    
  SourceDB=e:/VFP98/data;    
  SourceType=DBF’,    
  ’select   *   from   customer   where   country   !=   "USA"   order   by   country’)    
  go    
  /*****************   导出到DBF   ***************/    
  如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句    
   
  insert   into   openrowset(’MSDASQL’,    
  ’Driver=Microsoft   Visual   FoxPro   Driver;SourceType=DBF;SourceDB=c:/’,    
  ’select   *   from   [aa.DBF]’)    
  select   *   from   表    
   
  说明:    
  SourceDB=c:/     指定foxpro表所在的文件夹    
  aa.DBF                 指定foxpro表的文件名.    
   
     
   
   
  /*************导出到Access********************/    
  insert   into   openrowset(’Microsoft.Jet.OLEDB.4.0’,    
        ’x:/A.mdb’;’admin’;’’,A表)   select   *   from   数据库名..B表    
   
  /*************导入Access********************/    
  insert   into   B表   selet   *   from   openrowset(’Microsoft.Jet.OLEDB.4.0’,    
        ’x:/A.mdb’;’admin’;’’,A表)    
   
  *********************     导入   xml 文件    
   
  DECLARE   @idoc   int    
  DECLARE   @doc   varchar(1000)    
  --sample   XML   document    
  SET   @doc   =’    
  <root>    
      <Customer   cid=   "C1"   name="Janine"   city="Issaquah">    
              <Order   oid="O1"   date="1/20/1996"   amount="3.5"   />    
              <Order   oid="O2"   date="4/30/1997"   amount="13.4">Customer   was   very   satisfied    
              </Order>    
        </Customer>    
        <Customer   cid="C2"   name="Ursula"   city="Oelde"   >    
              <Order   oid="O3"   date="7/14/1999"   amount="100"   note="Wrap   it   blue    
                            white   red">    
                          <Urgency>Important</Urgency>    
                          Happy   Customer.    
              </Order>    
              <Order   oid="O4"   date="1/20/1996"   amount="10000"/>    
        </Customer>    
  </root>    
  ’    
  --   Create   an   internal   representation   of   the   XML   document.    
  EXEC   sp_xml_preparedocument   @idoc   OUTPUT,   @doc    
   
  --   Execute   a   SELECT   statement   using   OPENXML   rowset   provider.    
  SELECT   *    
  FROM   OPENXML   (@idoc,   ’/root/Customer/Order’,   1)    
              WITH   (oid           char(5),    
                          amount     float,    
                          comment   ntext   ’text()’)    
  EXEC   sp_xml_removedocument   @idoc    
   
   
  /********************导整个数据库*********************************************/    
   
  用bcp实现的存储过程    
   
   
  /*    
    实现数据导入/导出的存储过程    
                    根据不同的参数,可以实现导入/导出整个数据库/单个表    
    调用示例:    
  --导出调用示例    
  ----导出单个表    
  exec   file2table   ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:/zj.txt’,1    
  ----导出整个数据库    
  exec   file2table   ’zj’,’’,’’,’xzkh_sa’,’C:/docman’,1    
   
  --导入调用示例    
  ----导入单个表    
  exec   file2table   ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:/zj.txt’,0    
  ----导入整个数据库    
  exec   file2table   ’zj’,’’,’’,’xzkh_sa’,’C:/docman’,0    
   
  */    
  if   exists(select   1   from   sysobjects   where   name=’File2Table’   and   objectproperty(id,’IsProcedure’)=1)    
    drop   procedure   File2Table    
  go    
  create   procedure   File2Table    
  @servername   varchar(200)     --服务器名    
  ,@username   varchar(200)       --用户名,如果用NT验证方式,则为空’’    
  ,@password   varchar(200)       --密码    
  ,@tbname   varchar(500)       --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表    
  ,@filename   varchar(1000)     --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt    
  ,@isout   bit             --1为导出,0为导入    
  as    
  declare   @sql   varchar(8000)    
   
  if   @tbname   like   ’%.%.%’   --如果指定了表名,则直接导出单个表    
  begin    
    set   @sql=’bcp   ’+@tbname    
      +case   when   @isout=1   then   ’   out   ’   else   ’   in   ’   end    
      +’   "’+@filename+’"   /w’    
      +’   /S   ’+@servername    
      +case   when   isnull(@username,’’)=’’   then   ’’   else   ’   /U   ’+@username   end    
      +’   /P   ’+isnull(@password,’’)    
    exec   master..xp_cmdshell   @sql    
  end    
  else    
  begin   --导出整个数据库,定义游标,取出所有的用户表    
    declare   @m_tbname   varchar(250)    
    if   right(@filename,1)<>’/’   set   @filename=@filename+’/’    
   
    set   @m_tbname=’declare   #tb   cursor   for   select   name   from   ’+@tbname+’..sysobjects   where   xtype=’’U’’’    
    exec(@m_tbname)    
    open   #tb    
    fetch   next   from   #tb   into   @m_tbname    
    while   @@fetch_status=0    
    begin    
      set   @sql=’bcp   ’+@tbname+’..’+@m_tbname    
        +case   when   @isout=1   then   ’   out   ’   else   ’   in   ’   end    
        +’   "’+@filename+@m_tbname+’.txt   "   /w’    
        +’   /S   ’+@servername    
        +case   when   isnull(@username,’’)=’’   then   ’’   else   ’   /U   ’+@username   end    
        +’   /P   ’+isnull(@password,’’)    
      exec   master..xp_cmdshell   @sql    
      fetch   next   from   #tb   into   @m_tbname    
    end    
    close   #tb    
    deallocate   #tb      
  end    
  go      

 

 

参考:  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_copydb]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_copydb]  
  GO  
   
  /*--数据库数据复制  
   
  将一个数据库中的数据复制到另一个数据库  
  如果某列在目标数据库中为标识列,将不会被复制  
   
  适用范围:数据库结构发生了变化,想将旧数据库进行升级  
  这样就可以根据新的数据库结构创建一个空库,然后  
  将旧数据库的所有数据复制到新库中  
  --邹建   203.10--*/  
   
  /*--调用示例  
   
  exec   p_copydb   'bns_aa','bns_new'  
  exec   p_copydb   'acc_五医','acc_演示数据8'  
  --*/  
  create   proc   p_copydb  
  @o_dbname   sysname, --要复制数据的数据库--源数据库  
  @n_dbname   sysname --接收数据的数据库--目标数据库  
  --@cleardb   bit=0 --清空目标数据库  
  as  
  declare   @sql   nvarchar(4000)  
   
  --禁用约束/触发器,防止复制时的数据冲突  
  set   @sql='declare   #tbc   cursor   for   select   name  
  from   '+@n_dbname+'..sysobjects   where   xtype=''U''   and   status>=0'  
  exec(@sql)  
   
  declare   @tbname   sysname  
  open   #tbc  
  fetch   next   from   #tbc   into   @tbname  
  while   @@fetch_status=0  
  begin  
  set   @sql='alter   table   '+@n_dbname+'..['+@tbname+']   NOCHECK   CONSTRAINT   ALL'  
  exec(@sql)  
  set   @sql='alter   table   '+@n_dbname+'..['+@tbname+']   disable   trigger   ALL'  
  exec(@sql)  
  fetch   next   from   #tbc   into   @tbname  
  end  
  close   #tbc  
   
  --复制数据  
  declare   @sql1   varchar(8000)  
  set   @sql='declare   #tb   cursor   for   select   a.name   from   '  
  +@o_dbname+'..sysobjects   a   inner   join   '  
  +@n_dbname+'..sysobjects   b   on   a.name=b.name  
  where   a.xtype=''U''   and   b.xtype=''U'''  
  exec(@sql)  
  open   #tb  
  fetch   next   from   #tb   into   @tbname  
  while   @@fetch_status=0  
  begin  
  select   @sql1=''  
  ,@sql='select   @sql1=@sql1+'',[''+a.name+'']''   from(  
  select   name   from   '+@o_dbname+'..syscolumns   where   id   in    
  (select   id   from   '+@o_dbname+'..sysobjects   where   name='''+@tbname+''')  
  )   a inner   join   (  
  select   name   from   '+@n_dbname+'..syscolumns   where   status<>0x80   and   id   in    
  (select   id   from   '+@n_dbname+'..sysobjects   where   name='''+@tbname+''')  
  )   b   on   a.name=b.name'  
  exec   sp_executesql   @sql,N'@sql1   nvarchar(4000)   out',@sql1   out  
   
  select   @sql1=substring(@sql1,2,8000)  
  exec('insert   into   '+@n_dbname+'..['+@tbname+']('+@sql1  
  +')   select   '+@sql1+'   from   '+@o_dbname+'..['+@tbname+']')  
  if   @@error<>0  
  print('insert   into   '+@n_dbname+'..['+@tbname+']('+@sql1  
  +')   select   '+@sql1+'   from   '+@o_dbname+'..['+@tbname+']')  
  fetch   next   from   #tb   into   @tbname  
  end  
  close   #tb  
  deallocate   #tb  
   
  --数据复制完成后启用约束  
  open   #tbc  
  fetch   next   from   #tbc   into   @tbname  
  while   @@fetch_status=0  
  begin  
  set   @sql='alter   table   '+@n_dbname+'..['+@tbname+']   CHECK   CONSTRAINT   ALL'  
  exec(@sql)  
  set   @sql='alter   table   '+@n_dbname+'..['+@tbname+']   enable   trigger   ALL'  
  exec(@sql)  
  fetch   next   from   #tbc   into   @tbname  
  end  
  close   #tbc  
  deallocate   #tbc  
  go   
    
    
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值