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    
   
/* *********************Excel导到 Txt*************************************** */   
  想用  
  
select     *     into     opendatasource (...)    from     opendatasource (...)  
  实现将一个Excel文件内容导入到一个文本文件  
   
  假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)  
  且银行帐号导出到文本文件后分两部分,前8位和后8位分开。  
   
   
  如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2  
  然后就可以用下面的语句进行插入  
  注意文件名和目录根据你的实际情况进行修改.  
   
  
insert     into   
  
opendatasource ( ' MICROSOFT.JET.OLEDB.4.0 '   
  ,
' Text;HDR=Yes;DATABASE=C:\ '   
  )...
[ aa#txt ]   
  
-- ,aa#txt)  
   -- */  
   select    姓名,银行账号1 =left (银行账号, 8 ),银行账号2 =right (银行账号, 8 )    
  
from     
  
opendatasource ( ' MICROSOFT.JET.OLEDB.4.0 '   
  ,
' Excel   5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls '   
  
-- ,Sheet1$)  
  )... [ Sheet1$ ]   
   
   
   
  如果你想直接插入并生成文本文件,就要用bcp  
   
  
declare     @sql     varchar ( 8000 ), @tbname     varchar ( 50 )  
   
  
-- 首先将excel表内容导入到一个全局临时表  
   select     @tbname = ' [##temp ' + cast ( newid ()    as     varchar ( 40 )) + ' ] '   
  ,
@sql = ' select   姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)    
    into   
' + @tbname + '    from    
  opendatasource(
'' MICROSOFT.JET.OLEDB.4.0 ''   
  ,
'' Excel   5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls ''   
  )...[Sheet1$]
'   
  
exec ( @sql )  
   
  
-- 然后用bcp从全局临时表导出到文本文件  
   set     @sql = ' bcp   " ' + @tbname + ' "   out   "c:\aa.txt"   /S"(local)"   /P""   /c '   
  
exec    master..xp_cmdshell    @sql   
   
  
-- 删除临时表  
   exec ( ' drop   table    ' + @tbname )  


你可能感兴趣的:(sql语句)