将 Excel 导入到 SQL

Import Excel To SQL

大家好,我有一个小问题无法解决。这是上下文:

我的计算机上有一个 64 位 SQL Server 2014 实例和一个 32 位 Office 安装(安装的唯一组件是 Excel,没有 Word,没有 Office 工具,没有 Office 共享功能...)。我尝试每天导入一些存储在某个网络驱动器上的 .xls 文件中的数据,但我无法找到正确的方法。原因如下:

我试试这个命令:

INSERT INTO BBImport 
       SELECT * FROM 
       OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source=W:\..\aaa.xls;Extended Properties=''''Excel 8.0;HDR=Yes''''')...[Sheet5]

在解决了所有的权限问题之后,我终于得到了这个错误:

"The 32-bit OLE DB provider "Microsoft.Jet.OLEDB.12.0" 无法在 64 位 SQL 服务器上在进程内加载。"

注意:我也试过 Microsoft.ACE.OLEDB.12.0,同样的错误。

我尝试安装 Microsoft ACE 64 位,但它与我的 32 位 Office 安装不兼容 -_-...


但是,我通过指定以下内容,使用 SQL 的导入向导成功导入了数据:

数据来源:微软Excel | Excel 版本:Microsoft Excel 97-2003(或 2007 均可用)|目的地:SQL 服务器本机客户端 11.0

因为它有效,我为此创建了一个 SSIS 包并将其导入到我的集成服务目录中的一个新项目中。但是当我尝试 right-click/Execute 时,我的 SQL Server Management Studio 停止工作并且我在事件查看器中收到这些错误:

1. Application: Ssms.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
Stack:
   at Microsoft.SqlServer.IntegrationServices.UITasks.ExecuteTask.ShowReport()
   at System.Threading.ThreadHelper.ThreadStart_Context(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Threading.ThreadHelper.ThreadStart()
2. Faulting application name: Ssms.exe, version: 2014.120.2000.8, time stamp: 0x5306c06d
Faulting module name: KERNELBASE.dll, version: 6.1.7601.18409, time stamp: 0x53159a86
Exception code: 0xe0434352
Fault offset: 0x0000c42d
Faulting process id: 0x8d8
Faulting application start time: 0x01d06c81bcb45ec2
Faulting application path: C:\Program Files (x86)\Microsoft SQL Server0\Tools\Binn\ManagementStudio\Ssms.exe
Faulting module path: C:\Windows\syswow64\KERNELBASE.dll
Report Id: 84f7630f-d87a-11e4-a40a-005056ae5914
 3. Fault bucket , type 0
Event Name: CLR20r3
Response: Not available
Cab Id: 0
Problem signature:
P1: ssms.exe
P2: 2014.120.2000.8
P3: 5306c06d
P4: mscorlib
P5: 4.0.30319.18063
P6: 526766b5
P7: 170b
P8: 14
P9: System.IO.FileNotFoundException
P10: 
Attached files:
These files may be available here:
C:\Users\administrator.CASGRAIN\AppData\Local\Microsoft\Windows\WER\ReportArchive\AppCrash_ssms.exe_5c1853936685e7ed85eece7cc3339e468fa8b7_0aee4fe2
Analysis symbol: 
Rechecking for solution: 0
Report Id: 84f7630f-d87a-11e4-a40a-005056ae5914

我Google那些错误,但没有找到任何修复。

当我尝试通过 运行 这段代码通过存储过程执行它时,没有任何反应(没有结果,没有消息,我的 table 仍然是空的)。

Declare @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'BBImport2.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'test', @project_name=N'BBImport2', @use32bitruntime=False, @reference_id=NULL

EXEC [SSISDB].[catalog].[start_execution] @execution_id
GO

有没有人可以帮助我?

我最终通过简单地卸载 Office 32b 并安装 Office 64b 解决了我的问题。经过大量测试,问题要么是 SQL(64) 和 Office(32) 之间的兼容性,要么是文件没有完全导入,因为 excel 有很多 vlookup 函数可以搜索其他表格和那些表格需要 运行 bdp 函数(Bloomberg 函数)来填充。

我成功运行使用此命令导入我的 xls 文件:

INSERT INTO main SELECT * FROM 
    OPENDATASOURCE('Microsoft.Ace.OLEDB.12.0','Data Source=[path\filename.xls];Extended Properties=EXCEL 8.0')...[tablename]

我仍然不明白为什么当我手动 运行 包时它是从向导和 VS2013 中 运行ning 的,但是当我将包导入 SSIS 目录或当我直接执行查询时。它现在正在工作。我想这是唯一重要的事情...