将Excel数据导入SQL Server表遇兼容问题求解决方案
解决32位Office与64位SQL Server的Excel导入冲突(无需卸载Office)
你遇到的是非常常见的位不兼容问题:64位SQL Server无法加载32位的ACE驱动,而直接安装64位ACE又会被32位Office阻止。下面是几个不用卸载Office就能搞定的简便方案,按推荐程度排序:
1. 用32位版SQL Server导入导出向导(最省心)
SQL Server默认装的是64位向导,但同时也提供了32位版本,它能和你的32位Office完美配合:
- 找到32位向导的路径:
C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\DTSWizard.exe(SQL Server 2016对应版本号130,路径里的数字可能根据你的安装略有不同) - 运行这个程序后,按向导步骤操作:选择Excel数据源、指定文件路径、选择目标SQL Server表,全程不用写代码,就能顺利完成导入
2. 绕开ACE驱动:转成CSV用BULK INSERT
如果不想碰驱动问题,直接把Excel文件另存为CSV格式,然后用SQL Server的BULK INSERT命令导入,完全避开ACE:
-- 替换成你的目标表和文件路径 BULK INSERT YourTargetTable FROM 'C:\Users\Samra\Documents\Supervisor Grandfathering.csv' WITH ( FIELDTERMINATOR = ',', -- CSV的列分隔符,默认是逗号 ROWTERMINATOR = '\n', -- 行分隔符 FIRSTROW = 2, -- 如果Excel有表头,跳过第一行 CODEPAGE = '65001' -- 如果有中文或特殊字符,用UTF-8编码 );
3. 用32位PowerShell脚本导入
利用32位PowerShell调用Office的COM对象读取Excel,再写入SQL Server,全程和32位Office兼容:
# 必须用32位PowerShell,路径是:C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe $excelPath = "C:\Users\Samra\Documents\Supervisor Grandfathering.xls" $serverName = "YourSQLServerName" $dbName = "YourDatabaseName" $targetTable = "YourTargetTable" # 打开Excel文件 $excel = New-Object -ComObject Excel.Application $excel.Visible = $false # 后台运行,不显示Excel窗口 $workbook = $excel.Workbooks.Open($excelPath) $worksheet = $workbook.Worksheets.Item("sheet1") $range = $worksheet.UsedRange $data = $range.Value2 # 连接SQL Server $connectionString = "Server=$serverName;Database=$dbName;Integrated Security=True" $connection = New-Object System.Data.SqlClient.SqlConnection($connectionString) $connection.Open() # 循环插入数据(示例,根据你的表结构调整字段) for ($row = 2; $row -le $range.Rows.Count; $row++) { $col1 = $data[$row, 1] $col2 = $data[$row, 2] # 替换成你的表字段和插入语句 $sql = "INSERT INTO $targetTable (Column1, Column2) VALUES (@Col1, @Col2)" $command = $connection.CreateCommand() $command.CommandText = $sql $command.Parameters.AddWithValue("@Col1", $col1) $command.Parameters.AddWithValue("@Col2", $col2) $command.ExecuteNonQuery() } # 清理资源 $connection.Close() $workbook.Close($false) $excel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
4. 静默安装64位ACE驱动(备选,有风险)
微软官方不推荐,但可以用静默参数强制安装64位ACE驱动,不会提示卸载Office:
- 下载64位ACE安装包后,右键以管理员身份打开命令提示符,运行:
AccessDatabaseEngine_X64.exe /quiet
- 注意:这可能导致部分32位Office功能异常(比如依赖ACE的插件、VBA脚本),如果你的Office日常使用需要ACE驱动,谨慎尝试
内容的提问来源于stack exchange,提问作者Samra
相关产品推荐
相关产品推荐

