我有一个名为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$]')
但是给了我一个错误:
Msg 7308,Level 16,State 1,Line 1 OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”不能用于分布式查询,因为提供程序配置为在单线程单元模式下运行。
一些研究告诉我,它是因为64位SQL服务器实例而发生的。
问题是此Excel数据传输到SQL表必须仅使用SQL导入/导出向导完成。
如何在不创建新电子表格的情况下将Excel电子表格导入现有SQL表格?
我访问过的一些链接但无法帮助我解决问题:
答案 0 :(得分:25)
您可以通过以下方式将数据从en excel-sheet复制粘贴到SQL表中:
注意:表通常具有第一列,该列是具有自动生成/递增ID的ID列。粘贴数据时,它将开始将Excel中最左侧的选定列插入SSMS中最左侧的列,从而将数据插入ID列。为了避免这种情况,请在选择的最左侧部分保留一个空列,以便在SSMS中跳过该列。这将导致SSMS插入默认数据,即自动生成的ID。
此外,您可以通过在Excel工作表选择中的相同序号位置使用空列作为要跳过的列来跳过其他列。这将使SSMS插入默认值(或NULL,其中未指定默认值)。
答案 1 :(得分:8)
Saudate,我跑过去寻找另一个问题。您绝对可以使用Sql Server Import向导将数据导入新表。当然,您不希望将该表保留在数据库中,因此我建议您导入到新表中,然后在查询管理器中编写脚本以插入到现有表中。您可以添加一行来删除导入向导创建的临时表,作为成功完成脚本的最后一步。
我认为您的原始问题实际上与Sql Server 64位相关,并且是由于您拥有32位Excel并且这些驱动程序不能很好地协同工作。首次使用64位excel时,我遇到了一个非常类似的问题。
答案 2 :(得分:6)
您可以使用向导导入数据,然后您可以选择目标表。
运行向导。在选择源表和视图窗口时,您会看到两个部分。来源和目的地。
单击目标部分下的字段以打开下拉列表并选择目标表并根据需要编辑其映射。
答案 3 :(得分:3)
如果您想要一个软件工具来执行此操作,您可能希望查看此分步指南:
“如何验证Excel电子表格并将其导入SQL Server数据库”