64

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

是否存在任何简单的代码选项?

4

15 回答 15

51

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

于 2010-06-09T01:25:23.360 回答
25

微软建议了几种方法:

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

如果向导(DTS)不起作用(我认为应该),您可以尝试类似http://www.devasp.net/net/articles/display/771.html这基本上建议做类似的事情

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;
于 2008-12-17T21:02:42.977 回答
12

这可能听起来很长,但您可能希望使用Excel 生成 INSERT SQL 代码,您可以将其粘贴到查询分析器中以创建表。

如果您无法使用向导,则效果很好,因为 excel 文件不在服务器上

于 2008-12-22T02:41:34.907 回答
7

您可以使用 OPENROWSET,例如:

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

只需确保路径是服务器上的路径,而不是本地计算机上的路径。

于 2008-12-17T21:03:20.637 回答
4

另一种选择是在 Excel 中使用 VBA,并编写一个宏来解析电子表格数据并将其写入 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
于 2011-09-03T17:22:49.700 回答
4
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
于 2011-06-14T10:35:07.693 回答
3

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

我总能找到用它做我需要的能力,而且我只在 SQL Server 2000 上(不确定其他版本有何不同)。

编辑:事实上我现在正在看它,我似乎能够选择我想要映射到现有表中的哪些行的列。在“选择源表和视图”屏幕上,我检查了我正在使用的数据表,选择“目标”,然后单击“编辑...”按钮。从那里您可以选择 Excel 列和表列以将其映射到。

于 2008-12-17T21:09:41.323 回答
3

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

如何验证 Excel 电子表格并将其导入 SQL Server 数据库:

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

于 2014-02-05T22:53:14.037 回答
2

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

然后,您可以在 access 中设计一个查询,将 Excel 电子表格中的数据附加到 SQL Server 表中。

于 2010-02-12T19:40:41.933 回答
1

我用过的最好的工具是http://tools.perceptus.ca/text-wiz.php?ops=7你试过了吗?

于 2012-06-21T10:27:38.507 回答
1

我想它会帮助你

访问http://social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread/78f8e980-0bb6-4a48-b1b1-5f65bca1d511

于 2013-05-21T08:55:52.560 回答
0

Excel + SQLCMD + Perl = exceltomssqlinsert

并且您可以使用 Excel 作为 MSSQL db 的前端...注意每个生成的 sql 插入文件开头的截断表...

于 2011-04-23T19:55:25.143 回答
0

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

于 2008-12-17T21:01:07.300 回答
0

我使用了 DTS(现在称为 SQL 服务器导入和导出向导)。我使用了本教程,即使在 Sql 2008 和 excel 2010 (14.0) 中对我也很有效

我希望这有帮助

-D

于 2012-03-08T20:55:45.023 回答
0

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

背景:一切都取决于您的 Office(运行时引擎)安装。

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

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

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

于 2016-01-14T08:10:39.417 回答