• 将某个文件夹的excel csv文件导入数据库


    DECLARE @dir sysname,@cmd nvarchar(4000);
    SET @dir = 'C:\';

    CREATE TABLE #tmp(filename nvarchar(1024));
    SET @cmd = N'dir "' + @dir + '*.csv" /B'
    INSERT #tmp EXEC master.dbo.xp_cmdshell @cmd;

    DELETE #tmp WHERE filename IS NULL;

    IF EXISTS(SELECT * FROM #tmp WHERE filename LIKE '%找不到文件%')
        BEGIN
            RAISERROR('找不到文件',16,1)
        END
    ELSE
        BEGIN
            DECLARE @SQL nvarchar(MAX);
            SET @SQL = '';
            SELECT @SQL = @SQL + 'EXEC xp_cmdshell N''bcp 数据库.dbo.表 in "' + @dir + filename
                               + '" -w -T -t, -r\n'';' + CHAR(13) + CHAR(10)
            FROM #tmp;

            EXEC(@SQL);
        END

    DROP TABLE #tmp;

    读取文件列表不需要xp_cmdshell掉用dir命令,xp_dirtree就可以返回结果集了

    将某个目录上的Excel表,导入到数据库中 收藏
    --将某个目录上的Excel表,导入到数据库中

    --将所有的Excel文件放到一个目录中,假设为c:\test\,然后用下面的方法来做

    create table #t(fname varchar(260),depth int,isf bit)
    insert into #t exec master..xp_dirtree 'c:\test',1,1
    declare tb cursor for select fn='c:\test'+fname from #t
        where isf=1 and fname like '%.xls' --取.xls文件(EXCEL)
    declare @fn varchar(8000)
    open tb
    fetch next from tb into @fn
    while @@fetch_status=0
    begin
        --下面是查询语句,需要根据你的情况改为插入语句
        --插入已有的表用:insert into 表 selct * from ...
        --创建表用:select * into 表 from ...
        set @fn='select * from
        OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=YES;DATABASE='+@fn+''',全部客户$)'
        exec(@fn)
        fetch next from tb into @fn
    end
    close tb
    deallocate tb
    drop table #t

    访问excel
           1)、inert into A SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="E:\联系方式.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...           [Sheet1$]
               但此时查询结果得顺序是按照列名得顺序排列的,而不是按照电子表格中原有的顺序。这是 SQL Server 2000 行集函数 OpenRowSet 和 OpenDataSource 本身的问题,与访问接口引擎无关,也与 Excel 版本无关。SQL Server 2005 的 OpenRowSet 和 OpenDataSource 不存在这个问题。
           2)、inert into A select * from OpenRowSet('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;HDR=Yes;Database=E:\联系方式.xls', 'select * from [Sheet1$]')  
               此种方法可以解决opendatasurce得问题,即查询结果列得顺序与电子表格中原有顺序一致
           3)、使用链接服务器:
               exec sp_addlinkedserver @server='xlsserver',@srvproduct='jet4.0',@provider='microsoft.jet.oledb.4.0',@datasrc='E:\联系方式.xls',@provstr='excel            8.0'
              inert into A select * from xlsserver...[Sheet1$]
               此时查询结果中列得顺序是按照列名得顺序排列的。

  • 相关阅读:
    python学习之关于变量与内存的问题
    [题解]GDUT 2020年11月赛DE题
    【转】关于Oracle默认用户名system密码不正确登录不上解决方案
    [转载] Monitor Tools
    java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getAsyncContext()Ljavax/servlet/AsyncContext;
    【SSM】Result Maps collection already contains value for crud.dao.EmployeeMapper.BaseResultMap
    EL表达式失效,页面取不到数据
    处理回归BUG最佳实践
    固定QPS压测初试
    Java字符串到数组的转换--最后放大招
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175863.html
Copyright © 2020-2023  润新知