繁体   English   中英

将 Excel 电子表格数据导入现有的 sql 表?

[英]Import Excel Spreadsheet Data to an EXISTING sql table?

我有一个名为 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 服务器的 64 位实例。

问题是必须仅使用 SQL 导入/导出向导才能将 Excel 数据传输到 SQL 表。

如何在不创建新表格的情况下将 Excel 电子表格导入现有 SQL 表格?

我访问过的一些链接无法帮助我解决问题:

您可以通过执行以下操作将数据从 en excel-sheet 复制粘贴到 SQL 表:

  • 在 Excel 中选择数据并按 Ctrl + C
  • 在 SQL Server Management Studio 中右键单击表并选择编辑前 200 行
  • 滚动到底部并通过单击行标题选择整个空行
  • 按 Ctrl + V 粘贴数据

注意:通常表有第一列,它是一个 ID 列,带有自动生成/递增的 ID。 当您粘贴数据时,它会开始将 Excel 中最左侧的选定列插入到 SSMS 中最左侧的列中,从而将数据插入到 ID 列中。 为避免在选择的最左侧保留一个空列,以便在 SSMS 中跳过该列。 这将导致 SSMS 插入默认数据,即自动生成的 ID。

此外,您可以通过在 Excel 工作表选择中与要跳过的列相同的顺序位置放置空列来跳过其他列。 这将使 SSMS 插入默认值(或未指定默认值的 NULL)。

您可以使用向导导入数据,然后您可以选择目标表。

运行向导。 在选择源表和视图窗口中,您会看到两个部分。 来源和目的地。

单击目标部分下的字段以打开下拉列表并选择目标表并根据需要编辑其映射。

编辑

仅仅输入表名是行不通的。 似乎表的名称必须包括模式 ( dbo ) 和可能的括号。 请注意文本字段右侧的下拉列表。

在此处输入图片说明

Saudate,我遇到了这个寻找不同的问题。 您绝对可以使用 Sql Server 导入向导将数据导入新表。 当然,您不希望将该表留在数据库中,所以我的建议是您导入到一个新表中,然后在查询管理器中编写脚本以插入到现有表中。 您可以添加一行来删除由导入向导创建的临时表,作为脚本成功完成后的最后一步。

我相信您的原始问题实际上与 Sql Server 64 位有关,并且是由于您拥有 32 位 Excel 并且这些驱动程序不能很好地协同工作。 我第一次使用 64 位 excel 时确实遇到了一个非常相似的问题。

如果您想要一个软件工具来执行此操作,您可能需要查看此分步指南:

“如何验证 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM