我要写一个将数据库(SQL Server)导入到文本文件(或是Excel),再将文本文件(或Excel)将入到数据库的一个逆反过程,大家教教我吧!
如有能解决问题的贴子,一定高分相送.绝不食言

解决方案 »

  1.   

    盗版一下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  
     
     
     
      

  2.   

    ********************导整个数据库*********************************************/  
     
    用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)  
     
    加一下用bcp将文件导入导出到数据库的存储过程:  
     
     
    /*--bcp-二进制文件的导入导出  
     
               支持image,text,ntext字段的导入/导出  
               image适合于二进制文件;text,ntext适合于文本数据文件  
     
               注意:导入时,将覆盖满足条件的所有行  
                           导出时,将把所有满足条件的行也出到指定文件中  
     
               此存储过程仅用bcp实现  
    邹建  2003.08-----------------*/
      

  3.   

    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'
    )
      

  4.   

    这么长?我要好好看一下啦
    谢谢 aiirii(ari-爱的眼睛)