将Excel电子表格列导入到SQL Server数据库中

我有一个Excel电子表格,我想导入select列到我的SQL Server 2008数据库表。 该向导没有提供该选项。

有没有简单的代码选项存在?

一旦连接到Sql Server 2005数据库,从对象资源pipe理器窗口中,右键单击要导入表的数据库。 select任务 – >导入数据。 这是一个简单的工具,并允许您将传入的数据“映射”到适当的表格中。 您可以保存脚本以在需要时再次运行。

微软提出了几种方法:

  • SQL Server数据转换服务(DTS)
  • Microsoft SQL Server 2005集成服务(SSIS)
  • SQL Server链接的服务器
  • SQL Server分布式查询
  • ActiveX数据对象(ADO)和用于SQL Server的Microsoft OLE DB提供程序
  • ADO和Jet 4.0的Microsoft OLE DB提供程序

如果向导(DTS)不工作(我认为它应该),你可以尝试像这样http://www.devasp.net/net/articles/display/771.html基本上build议做类似;

INSERT INTO [tblTemp] ([Column1], [Column2], [Column3], [Column4]) SELECT A.[Column1], A.[Column2], A.[Column3], A.[Column4] FROM OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\Excel.xls;HDR=YES', 'select * from [Sheet1$]') AS A; 

这可能听起来像很漫长,但您可能希望看看使用Excel生成INSERT SQL代码,您可以通过查询分析器来创build您的表。

如果你不能使用向导,因为excel文件不在服务器上,效果很好

你可以使用OPENROWSET,如下所示:

 SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;IMEX=1;HDR=NO;DATABASE=C:\FILE.xls', 'Select * from [Sheet1$]' 

只要确保path是服务器上的path,而不是本地机器。

 go sp_configure 'show advanced options',1 reconfigure with override go sp_configure 'Ad Hoc Distributed Queries',1 reconfigure with override go SELECT * into temptable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\Documents and Settings\abhisharma\Desktop\exl\ImportExcel2SQLServer\ImportExcel2SQLServer\example.xls;IMEX=1', 'SELECT * FROM [Sheet1$]') select * from temptable 

另一个select是在Excel中使用VBA,并编写一个macros来parsing电子表格数据并将其写入SQL。

一个例子是: http : //www.ozgrid.com/forum/showthread.php?t =26621& page=1

 Sub InsertARecord() Dim cnt As ADODB.Connection Dim rst As ADODB.Recordset Dim stCon As String, stSQL As String Set cnt = New ADODB.Connection Set rst = New ADODB.Recordset stCon = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=JOEY" cnt.ConnectionString = stCon stSQL = "INSERT INTO MyTable (Price)" stSQL = stSQL & "VALUES (500)" cnt.Open rst.Open stSQL, cnt, adOpenStatic, adLockReadOnly, adCmdText If CBool(rst.State And adStateOpen) = True Then rst.Close Set rst = Nothing If CBool(cnt.State And adStateOpen) = True Then cnt.Close Set cnt = Nothing End Sub 

我假设你正在谈论“SQL Server导入和导出向导”。 (我也很新,所以我不明白大多数的问题,更不用说大多数的答案,但我想我得到这个)。 如果是这样,你不能拿电子表格,或它的副本,删除你不想导入的列,然后使用向导?

我总是能够做到我需要的东西,而且我只在SQL Server 2000上(不知道其他版本有什么不同)。

编辑:其实我现在正在看它,我似乎可以select哪些列我想映射到现有表中的哪些行。 在“select源表格和视图”屏幕上,我查看我正在使用的数据表,select“目的地”,然后点击“编辑…”button。 从那里你可以selectExcel列和表列来映射到。

如果你想要一个包含validation的桌面界面的可视化工具..你可能会喜欢这个Excel工具。 您还可以使用该工具创build多用户数据编辑任务,甚至可以将数据从任何来源粘贴到SQL Server。

如何validation和导入Excel电子表格到SQL Server数据库:

http://leansoftware.net/en-us/help/excel-database-tasks/worked-examples/how-to-import-excel-spreadsheet-to-sql-server-data.aspx

Microsoft Access是另一种select。 您可以在本地机器上有一个Access数据库,您可以将Excel电子表格导入(向导可用)并通过ODBC链接到SQL Server数据库表 。

然后,您可以devise一个访问查询,将Excel电子表格中的数据附加到SQL Server表中。

导入向导确实提供了该选项。 您可以使用该选项为要导入的数据编写自己的查询,也可以使用复制数据选项并使用“编辑映射”(Edit Mappings)button忽略不想导入的列。

Excel + SQLCMD + Perl = exceltomssqlinsert

并可以使用您的Excel作为前端到MSSQL数据库…请注意在每个生成的SQL插入文件的开始truncate表…

我已经使用DTS(现在称为SQL服务器导入和导出向导)。 我使用了这个教程 ,即使在Sql 2008和Excel 2010(14.0)

我希望这有帮助

-D

首先,尝试导入向导的32位版本。 这显示了更多支持的导入格式。

背景:全部取决于您的Office(运行时引擎)安装。

如果您没有安装Office 2007或更高版本,导入向导(32位)仅允许您导入Excel 97-2003(.xls)文件。

如果您安装了Office 2010和geater(也包括64位,不build议),导入向导还支持Excel 2007+(.xlsx)文件。

要获得关于运行时间的概述,请参阅“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册

Interesting Posts