将 Excel 电子表格数据导入现有的 sql 表?
Posted
技术标签:
【中文标题】将 Excel 电子表格数据导入现有的 sql 表?【英文标题】:Import Excel Spreadsheet Data to an EXISTING sql table? 【发布时间】:2013-12-03 19:32:58 【问题描述】:我有一个名为 tblAccounts 的表,其内容将来自 Excel 电子表格。
我在 Windows 8.1 (x64) 上使用 MS SQL Server 2008 (x64)
我尝试使用 SQL Server 导入/导出向导,但没有选择现有表的选项,只有创建新表的选项。
我尝试使用其他方法,例如 OPENROWSETS
INSERT INTO tblAccount SELECT * FROM OPENROWSET( 'Microsoft.Jet.OLEDB.4.0',
'Excel 12.0;Database=D:\exceloutp.xls','SELECT * FROM [Sheet1$]')
但给了我一个错误:
消息 7308,第 16 级,状态 1,第 1 行 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”不能用于分布式查询,因为该提供程序配置为在单线程单元模式下运行。
一些研究告诉我,这是由于 SQL Server 的 64 位实例而发生的。
问题在于,必须仅使用 SQL 导入/导出向导来完成向 SQL 表的 Excel 数据传输。
如何在不创建新 SQL 表的情况下将 Excel 电子表格导入现有 SQL 表?
我访问了一些链接,但无法帮助我解决问题:
How do I import an excel spreadsheet into SQL Server? Fix OLE DB error【问题讨论】:
为什么不导入一个新的临时表,然后“选择”你想要的实际表? 我非常喜欢 Brennan 先生的建议,但我们只能使用 SQL Server 导入/导出向导。是否可以通过上述向导?谢谢! 我已经使用bcp Utility
msdn.microsoft.com/en-us/library/ms162802.aspx 做了同样的事情,但我从未尝试导入/导出 excel 文件。你可以检查一下。
【参考方案1】:
您可以通过这样做将数据从 excel-sheet 复制粘贴到 SQL 表中:
在 Excel 中选择数据并按 Ctrl + C 在 SQL Server Management Studio 中,右键单击表并选择编辑前 200 行 滚动到底部并通过单击行标题选择整个空行 按 Ctrl + V 粘贴数据注意:通常表的第一列是 ID 列,具有自动生成/递增的 ID。当您粘贴数据时,它将开始将 Excel 中最左侧的选定列插入 SSMS 中的最左侧列,从而将数据插入 ID 列。为了避免这种情况,请在选择的最左侧保留一个空列,以便在 SSMS 中跳过该列。这将导致 SSMS 插入默认数据,即自动生成的 ID。
此外,您可以通过在 Excel 工作表选择中与要跳过的那些列相同的序号位置设置空列来跳过其他列。这将使 SSMS 插入默认值(或未指定默认值的 NULL)。
【讨论】:
这不是很快,但它确实有效,在一个 8 列的表中加载 24,968 行 5 列需要 15 或 20 分钟。 我相信选择中的空列应该是最左边的,以匹配 ID 列在 SSMS 中最左边的位置。 请注意,如果您有错误(例如,如果您没有在复制的数据中留下空列并尝试将其输入到带有 ID 列的表中),您将拥有在错误消息上单击“确定”的次数与复制数据中的行数相同。无法取消。 对于非常少的数据,这是一个不错的选择,但如果数据更多,导入是更快的方法。【参考方案2】:Saudate,我在寻找不同的问题时遇到了这个问题。您绝对可以使用 Sql Server 导入向导将数据导入新表。当然,您不希望将该表留在数据库中,所以我的建议是您导入到一个新表中,然后在查询管理器中编写脚本以将数据插入到现有表中。您可以添加一行来删除导入向导创建的临时表,作为脚本成功完成后的最后一步。
我相信您最初的问题实际上与 Sql Server 64 位有关,并且是由于您拥有 32 位 Excel 并且这些驱动程序不能很好地配合使用。第一次使用 64 位 excel 时,我确实遇到了一个非常相似的问题。
【讨论】:
谢谢!我能够使用导入向导将我的 Excel 文件传输到我的表中。我只是没有看到选择表格的选项,但确实有。我还使用了逗号分隔文件并创建了一个临时表作为解决方法!谢谢!【参考方案3】:如果您想要一个软件工具来执行此操作,您可能想查看此分步指南:
“如何验证 Excel 电子表格并将其导入 SQL Server 数据库”
http://leansoftware.net/forum/en-us/help/excel-database-tasks/worked-examples/how-to-import-excel-spreadsheet-to-sql-server-data.aspx
【讨论】:
【参考方案4】:您可以通过向导使用导入数据,并在那里您可以选择目标表。
运行向导。在选择源表和视图窗口中,您会看到两个部分。来源和目的地。
单击目标部分下的字段以打开下拉列表并选择您的目标表并根据需要编辑其映射。
编辑
仅仅输入表的名称是行不通的。似乎表的名称必须包含模式 (dbo
) 和可能的括号。请注意文本字段右侧的下拉菜单。
【讨论】:
如果您的导入文件与现有表的名称匹配,则导入向导将自动建议将数据修改到现有表而不是创建新表。 这绝对是答案,应该是勾选的。只需使用下拉菜单并选择您需要的表格,再简单不过了。以上是关于将 Excel 电子表格数据导入现有的 sql 表?的主要内容,如果未能解决你的问题,请参考以下文章
将 Excel 中的两列导入现有的 Access2010 表中使用转移电子表格时出错
将 Excel 电子表格列导入 SQL Server 数据库