------------------用SQL读取某目录下EXCEL文件的内容----------------

来源:互联网 发布:艺恩咨询数据库 编辑:程序博客网 时间:2024/06/05 11:28

首先声明,这个存储过程大部分是SQL77写出来的,哥这几天正研究快照隔离下OPENXML语句JOIN以后报错的问题,头大ING。。。

 

还好有屁7帮了我这个忙,不然累死。

 

思路非常简单,XP_CMDSHELL读取某一目录下的文件名称,然后游标遍历之,代码就在下面了

 

IF OBJECT_ID('P_EXCELFILETODATA') IS NOT NULLDROP PROC P_EXCELFILETODATAGOCREATE PROC P_EXCELFILETODATA(@PATH SYSNAME, --完全路径名@FILTER SYSNAME='*.XLSX',--默认导EXCEL2007的@TBNAME VARCHAR(MAX) --插入的表名)AS--@PATH 完全路径名(D:\XXXX\)--@FILTER 筛选的文件名选项以及文件类型(合并一起输入)SET NOCOUNT ONDECLARE @S NVARCHAR(4000),@SQL NVARCHAR(4000)--,@PATH NVARCHAR(4000),@FILTER SYSNAMESET @S='DIR '+@PATH+@FILTER+'/B'CREATE TABLE #FILE(FLNAME SYSNAME NULL)INSERT INTO #FILE EXEC MASTER..XP_CMDSHELL @SDECLARE @FILE SYSNAME,@SHEETNAME SYSNAMEDECLARE CUR_FILENAME CURSORFORSELECT * FROM #FILE WHERE [FLNAME] IS NOT NULL AND [FLNAME]<>'找不到文件'OPEN CUR_FILENAMEFETCH NEXT FROM CUR_FILENAME INTO @FILEWHILE @@FETCH_STATUS=0BEGINSET @SHEETNAME=LEFT(@FILE,CHARINDEX('.',@FILE)-1)--PRINT @SHEETNAMESELECT @SQL = ISNULL(@SQL,'')+ 'INSERT INTO ' + @TBNAME + ' SELECT * FROM OPENROWSET(    ''MICROSOFT.ACE.OLEDB.12.0'', ''EXCEL 12.0;HDR=YES;IMEX=1;DATABASE='+@PATH+@FILE+''',''SELECT * FROM ['+@SHEETNAME+'$]'')'FETCH NEXT FROM CUR_FILENAME INTO @FILEENDEXEC(@SQL)CLOSE CUR_FILENAMEDEALLOCATE CUR_FILENAMEGO--测试--在D盘建立ExcelFiles文件夹,里面建立3个EXCEL文档,分别命名为a,b,c--记得把三个EXCEL的SHEET1改成a,b,cIF OBJECT_ID('TB')IS NOT NULLDROP TABLE TBGOCREATE TABLE TB(A VARCHAR(10),B VARCHAR(10),C VARCHAR(10),D VARCHAR(10))GOEXEC P_EXCELFILETODATA 'D:\ExcelFiles\','*.XLSX','TB'GOSELECT * FROM TB/*A          B          C          D---------- ---------- ---------- ----------1          2          3          42          3          4          52          3          s          sw          w          w          w(4 行受影响)*/


 

原创粉丝点击