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

2023-05-16

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

 

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

 

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

 

IF OBJECT_ID('P_EXCELFILETODATA') IS NOT NULL
DROP PROC P_EXCELFILETODATA
GO
CREATE PROC P_EXCELFILETODATA
(
@PATH SYSNAME, --完全路径名
@FILTER SYSNAME='*.XLSX',--默认导EXCEL2007的
@TBNAME VARCHAR(MAX) --插入的表名
)
AS
--@PATH 完全路径名(D:\XXXX\)
--@FILTER 筛选的文件名选项以及文件类型(合并一起输入)
SET NOCOUNT ON
DECLARE @S NVARCHAR(4000),@SQL NVARCHAR(4000)--,@PATH NVARCHAR(4000),@FILTER SYSNAME
SET @S='DIR '+@PATH+@FILTER+'/B'
CREATE TABLE #FILE(FLNAME SYSNAME NULL)
INSERT INTO #FILE EXEC MASTER..XP_CMDSHELL @S
DECLARE @FILE SYSNAME,@SHEETNAME SYSNAME
DECLARE CUR_FILENAME CURSOR
FOR
SELECT * FROM #FILE WHERE [FLNAME] IS NOT NULL AND [FLNAME]<>'找不到文件'
OPEN CUR_FILENAME
FETCH NEXT FROM CUR_FILENAME INTO @FILE
WHILE @@FETCH_STATUS=0
BEGIN
	SET @SHEETNAME=LEFT(@FILE,CHARINDEX('.',@FILE)-1)
	--PRINT @SHEETNAME
	SELECT @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 @FILE
END
EXEC(@SQL)
CLOSE CUR_FILENAME
DEALLOCATE CUR_FILENAME
GO

--测试
--在D盘建立ExcelFiles文件夹,里面建立3个EXCEL文档,分别命名为a,b,c
--记得把三个EXCEL的SHEET1改成a,b,c
IF OBJECT_ID('TB')IS NOT NULL
DROP TABLE TB
GO
CREATE TABLE TB
(
A VARCHAR(10),
B VARCHAR(10),
C VARCHAR(10),
D VARCHAR(10)
)
GO

EXEC P_EXCELFILETODATA 'D:\ExcelFiles\','*.XLSX','TB'
GO


SELECT * FROM TB

/*A          B          C          D
---------- ---------- ---------- ----------
1          2          3          4
2          3          4          5
2          3          s          s
w          w          w          w

(4 行受影响)*/


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 使用 avg 和 group by 进行 SQL 查询

    我在为 MySQL 编写 SQL 查询时遇到一些问题 我有一个具有以下结构的表 mysql gt select id pass val from data r1 limit 10 id pass val DA02959106 5 00000
  • 通过php将MYSQL数据导出到Excel/CSV

    我想通过 php 将 MYSQL 数据导出到 Excel CSV 这样我以后就可以使用我的数据库 或者有人可以使用并理解它 要使用适合 EXCEL 的语法创建 CSV 文件 您可以使用基本 SQL SELECT FROM mytable I
  • 防止在 Windows 资源管理器中打开重复的文件夹或子文件夹

    我正在使用下面的代码打开特定文件夹 我需要在打开之前检查一下 如果是的话文件夹或子文件夹是否已在 Windows 资源管理器中打开 以防止重复 感谢任何有用的评论和答案 Sub Prevent opening duplicate folde
  • 返回动态列集

    我创建了以下函数来根据该函数的参数返回列集 CREATE OR REPLACE FUNCTION getColumns IN column1 text IN column2 text IN column3 text IN column4 t
  • 无法在函数内将数据写入 Excel 2007/2010 中的 VBA 单元格

    我想通过 VBA 设置单元格的值 我用谷歌搜索了一下 看到了一些解决方案 Sheets SheetName Range A1 value someValue Sheets SheetName Cells 1 1 value someValu
  • VBA添加图表标题

    我只想使用 vba 将图表标题添加到我的图表中 我实际上想对每张纸中的每个图表递归地执行此操作 但我什至无法让 1 个图表工作 这是我的代码 Dim chnam chnam Left ActiveSheet Name Len ActiveS
  • 从命令行使用 VBScript 从 Excel 外部运行 Excel 宏

    我正在尝试从 Excel 文件外部运行 Excel 宏 我目前正在使用从命令行运行的 vbs 文件 但它一直告诉我找不到宏 这是我尝试使用的脚本 Set objExcel CreateObject Excel Application Set
  • 通过SSIS动态创建Excel表

    在 SSIS 中使用执行 SQL 任务 创建的 Excel 文件 包含多个列和不同的数据类型 这里的问题是 INT Money 列在 Excel 中显示为文本列 即使 Excel 表是使用 Int Money 数据类型创建的 我尝试过使用双
  • 如何防止Excel单元格中前导零自动截断

    如果我粘贴04562 它会自动截断前导零并将其存储为4562 我希望将其存储为04562 如果您使用 MS Excel 编辑需要存储带前导零的数字的单元格 只需将单元格内容格式化并定义为文本即可 如果您以编程方式存储它 则可以将该值放在引号
  • SQL Server 2000 - 将查询分成 15 分钟的块

    我有一个连续时间数据集 我想使用 sql 将其分成 15 分钟的块 如果我能帮忙的话 我不想必须创建一个新表才能做到这一点 i e 时间 计数09 15 109 30 309 45 010 00 210 15 3 有谁知道我该怎么做 我认为
  • 如何在Excel VBA中获取给定模块名称的函数和子列表

    我正在开发一个帮助宏 它可以查看活动 Excel 工作簿上给定模块名称的列表函数 例如 我有一个模块名称 Module1 该模块内部有以下功能或子功能 Sub Sub1 End Sub Sub Sub2 End Sub Function F
  • Codeigniter 如何清理输入?

    我正在构建一个 Codeigniter 应用程序 并且正在尽最大努力防止 SQL 注入 我正在使用 Active Record 方法来构建我的所有查询 我知道 Active Record 会自动清理输入 但我想知道到底清理到什么程度 它只是
  • Bigquery:如何声明数组变量并使用 select 语句设置数据?

    我试图在 BigQuery 上声明一个数组变量 但无法在变量中放入 SQL 语句 我找不到任何与此相关的主题 我想将表的所有列名放入变量中 所以我尝试了以下方法 DECLARE my array ARRAY
  • 在 RDBMS 中何时使用三元关系而不是聚合?

    我想知道什么时候可以表示实体集和三元关系之间的关系 我明白聚合的好处 但是如果实体集和关系集之间的关系中没有属性 为什么还要使用聚合呢 例如 一名研究生 具有学生编号和姓名 正在从事一个项目 具有 pid 开始日期和结束日期 并且学生从事的
  • 无效号码错误!似乎无法绕过它

    Oracle 10g 数据库 我有一张桌子叫s contact 这个表有一个字段叫做person uid This person uid字段是 varchar2 但包含某些行的有效数字和其他行的无效数字 例如 一行可能有一个person u
  • 在 Objective-C (iPhone) 中从 Excel 文件读取数据 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 google 中搜索过 但似乎没有找到从 Objective C 读取 Excel 文件的方法 我找到的唯一答案是首先转换为 CSV
  • 将Excel数据转换为特定的JSON格式

    我收到一个 Excel 文件 xlsx 如下所示 行和列的数量可以变化 例如 它也可以如下所示 对于第一张图片中的 Excel 工作表 JSON 应如下所示 value Prename Nik Age 17 Country Switzerl
  • 您可以使用 Openpyxl 将全名拆分为名字和姓氏吗?

    我有一个 Excel 文件 我一直在尝试使用 openpyxl 将列 全名 拆分为两个单独的名字和姓氏列 例如 我有 from openpyxl import Workbook load workbook wb load workboo p
  • 将行连接成 CLOB

    关于这个主题有很多类似的问题 但我找不到任何解决方案来考虑最终结果对于 varchar2 来说太大的任何问题 所以我想做的就是改变这一点 Column1 Column2 1 Hello 1 world 1 please help 2 Tha
  • VBA 下标超出工作簿名称范围

    我从网上拉了一些代码来打开文件夹中的最新文件 这似乎工作得很好 然而 在代码的后面 我添加了一行附加行来设置最近打开的同一文件 尝试此操作时 工作簿 subscipt 超出范围 我认为这与语法有关 可能需要在工作簿名称中添加额外的引号 有什

随机推荐