zoukankan      html  css  js  c++  java
  • 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 


    /**********************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-----------------
    */
     

    /*--调用示例 
    --数据导出 
     exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:\zj1.dat’ 

    --数据导出 
     exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:\zj1.dat’,’’,0 
    --
    */
     
    if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[p_binaryIO]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1
    drop procedure [dbo].[p_binaryIO] 
    GO 

    Create proc p_binaryIO 
    @servename varchar (30),--服务器名称 
    @username varchar (30), --用户名 
    @password varchar (30), --密码 
    @tbname varchar (500),  --数据库..表名 
    @fdname varchar (30),  --字段名 
    @fname varchar (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+.bak 
    @tj varchar (1000)=’’,  --处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀 
    @isout bit=1   --1导出((默认),0导入 
    AS 
    declare @fname_in varchar(1000--bcp处理应答文件名 
     ,@fsize varchar(20)   --要处理的文件的大小 
     ,@m_tbname varchar(50)  --临时表名 
     ,@sql varchar(8000

    --则取得导入文件的大小 
    if @isout=1 
     
    set @fsize=0’ 
    else 
    begin 
     
    create table #tb(可选名 varchar(20),大小 int 
      ,创建日期 
    varchar(10),创建时间 varchar(20
      ,上次写操作日期 
    varchar(10),上次写操作时间 varchar(20
      ,上次访问日期 
    varchar(10),上次访问时间 varchar(20),特性 int
     
    insert into #tb 
     
    exec master..xp_getfiledetails @fname 
     
    select @fsize=大小 from #tb 
     
    drop table #tb 
     
    if @fsize is null 
     
    begin 
      
    print ’文件未找到’ 
      
    return 
     
    end 

    end 

    --生成数据处理应答文件 
    set @m_tbname=[##temp’+cast(newid() as varchar(40))+’]’ 
    set @sql=select * into ’+@m_tbname+’ from
     
    select null as 类型 
     
    union all select 0 as 前缀 
     
    union all select ’+@fsize+’ as 长度 
     
    union all select null as 结束 
     
    union all select null as 格式 
     ) a’ 
    exec(@sql
    select @fname_in=@fname+’_temp’ 
     ,
    @sql=’bcp "’+@m_tbname+’" out "’+@fname_in 
     
    +’" /S"’+@servename 
     
    +case when isnull(@username,’’)=’’ then ’’ 
      
    else ’" /U"’+@username end 
     
    +’" /P"’+isnull(@password,’’)+’" /c’ 
    exec master..xp_cmdshell @sql 
    --删除临时表 
    set @sql=drop table ’+@m_tbname 
    exec(@sql

    if @isout=1 
    begin 
     
    set @sql=’bcp "select top 1 ’+@fdname+’ from ’ 
      
    +@tbname+case isnull(@tj,’’) when ’’ then ’’ 
       
    else ’ where ’+@tj end 
      
    +’" queryout "’+@fname 
      
    +’" /S"’+@servename 
      
    +case when isnull(@username,’’)=’’ then ’’ 
       
    else ’" /U"’+@username end 
      
    +’" /P"’+isnull(@password,’’) 
      
    +’" /i"’+@fname_in+’"’ 
     
    exec master..xp_cmdshell @sql 
    end 
    else 
    begin 
     
    --为数据导入准备临时表 
     set @sql=select top 0 ’+@fdname+’ into ’ 
      
    +@m_tbname+’ from ’ +@tbname 
     
    exec(@sql

     
    --将数据导入到临时表 
     set @sql=’bcp "’+@m_tbname+’" in "’+@fname 
      
    +’" /S"’+@servename 
      
    +case when isnull(@username,’’)=’’ then ’’ 
       
    else ’" /U"’+@username end 
      
    +’" /P"’+isnull(@password,’’) 
      
    +’" /i"’+@fname_in+’"’ 
     
    exec master..xp_cmdshell @sql 
      
     
    --将数据导入到正式表中 
     set @sql=update ’+@tbname 
      
    +’ set ’+@fdname+=b.’+@fdname 
      
    +’ from ’+@tbname+’ a,’ 
      
    +@m_tbname+’ b’ 
      
    +case isnull(@tj,’’) when ’’ then ’’ 
       
    else ’ where ’+@tj end 
     
    exec(@sql

     
    --删除数据处理临时表 
     set @sql=drop table ’+@m_tbname 
    end 

    --删除数据处理应答文件 
    set @sql=’del ’+@fname_in 
    exec master..xp_cmdshell @sql 

    go 


    /** 导入文本文件 
    EXEC master..xp_cmdshell ’bcp "dbname..tablename" in c:\DT.txt -c -Sservername -Usa -Ppassword’ 

    改为如下,不需引号 
    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’ 
    此句需加引号 
  • 相关阅读:
    Coursera机器学习week11 单元测试
    关于 TypeReference 的解释
    getModifiers 方法解释。
    instanceof isInstance isAssignableFrom 比较
    elasticsearch 基础 语法总结
    kibana 启动 关闭 和进程查找
    MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别
    spring boot 项目 热启动
    java zip 压缩文件
    Packet for query is too large (1660 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
  • 原文地址:https://www.cnblogs.com/luoyaoquan/p/2052597.html
Copyright © 2011-2022 走看看