SQL数据库内批量导入

首先介绍个ssis(SQL Server Integration Services)批量导入Excel的图解方法!

这个东东我没用过,只知道有这么一个东西,以后难免也会涉及到,顺便涉及到,废话不说,传送门开启:

http://blog.youkuaiyun.com/jinjazz/archive/2008/07/25/2710169.aspx(里面有相应的方法)

不用ssis的就继续往下看吧:

 

---------------------------------------------------------------------------------------

这个是我在论坛上看到的。顺便学习,充实下自己:

问题:

     我有500多个csv文件,想导入SQL数据库内,数据库字段与文件字段是一样的, 如何写批量导入语句??

 

以下解决方法:

     首先是梁这位牛人的:

 

    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就可以返回结果集了 

 

以下:貌似是用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 intoSELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="E:/联系方式.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...           [Sheet1$]
           但此时查询结果得顺序是按照列名得顺序排列的,而不是按照电子表格中原有的顺序。这是 SQL Server
2000 行集函数 OpenRowSetOpenDataSource 本身的问题,与访问接口引擎无关,也与 Excel 版本无关。SQL Server 2005OpenRowSetOpenDataSource 不存在这个问题。
      
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
intoselect * from xlsserver...[Sheet1$]
           此时查询结果中列得顺序是按照列名得顺序排列的。

------------------------------------------------------------------------------------------------------

 

                                                            我们的论坛,很好,很强大~!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值