使用EXCEL将数据导入SQLSERVER数据库时,内容是数字的列导入后全都是NULL值,为啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用EXCEL将数据导入SQLSERVER数据库时,内容是数字的列导入后全都是NULL值,为啥?相关的知识,希望对你有一定的参考价值。

你的EXCEL文件数字列 中存在文本型的东西,导致导入时类型因不符合而导入NULL值 参考技术A 1、你是用什么方式导入的?
2、可能导入时弄错了字段名。

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

【中文标题】将 Excel 电子表格列导入 SQL Server 数据库【英文标题】:Import Excel spreadsheet columns into SQL Server database 【发布时间】:2010-09-27 10:06:02 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

使用 SQL Server Management Studio 建立与数据库的连接。那么这个答案是有道理的。此任务启动包含 Microsoft Excel 作为数据源的 SQL Server 导入和导出向导。这与运行没有此选项的本机导入和导出 SSIS 应用程序形成对比 :-(. 任务 -> 2008 年该菜单中不存在导入数据。 使用 SQL Server 2008(不是 R2)我确实看到任务 --> 右键单击​​数据库时导入数据。 如果未安装 SSIS,则此选项不可用。如果你在安装了这个的 SQL Server 上使用 SSMS,你应该有这个选项。如果您在仅安装了客户端工具(仅 SSMS)的计算机上,您将看不到该选项。【参考方案2】:

Microsoft suggest几种方法:

SQL Server 数据转换服务 (DTS) Microsoft SQL Server 2005 集成服务 (SSIS) SQL Server 链接服务器 SQL Server 分布式查询 ActiveX 数据对象 (ADO) 和 Microsoft OLE DB Provider for SQL Server 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;

【讨论】:

嗯。这表明我必须在服务器而不是我的电脑上拥有 excel。有没有办法将它定向到我的电脑?我还没有找到答案。 当我尝试这个时,我收到错误“FROM 子句中的语法错误”。 (Microsoft JET 数据库引擎)' 你可以试试这个下载文件microsoft.com/en-us/download/details.aspx?id=13255 for 64x 我还没有测试过但看起来很有希望..【参考方案3】:

这听起来似乎很遥远,但您可能想看看使用Excel to generate INSERT SQL 代码,您可以将其粘贴到查询分析器中以创建您的表。

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

【讨论】:

这个 (link) 是我用来将数据插入 MySQL 的类似方法(这里可以使用相同的方法)【参考方案4】:

您可以使用 OPENROWSET,例如:

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

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

【讨论】:

没有办法访问我的本地机器? 好吧,您可以在本地计算机上创建一个共享,并将 SQL Server 计算机上的网络驱动器映射到该共享,然后以这种方式访问​​您的文件.... 我收到错误消息,无法为链接服务器“(null)”创建 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”的实例。 什么操作系统?如果它是旧的,您可能需要安装 MDAC【参考方案5】:
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

【讨论】:

【参考方案6】:

另一种选择是在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

【讨论】:

【参考方案7】:

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

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

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

【讨论】:

【参考方案8】:

如果您想要一个带有桌面界面的可视化工具,包括验证......您可能会喜欢这个 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

【讨论】:

【参考方案9】:

Microsoft Access 是另一种选择。您可以在您的机器上本地拥有一个 Access 数据库,您可以将 Excel 电子表格导入(可用的向导)和link to the the SQL Server database tables via ODBC。

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

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

我想对你有帮助

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

【讨论】:

【参考方案12】:

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

【讨论】:

它没有让我选择导入现有表,只有数据库,它会创建一个新表。 (SQLServer 2008) 发现它是如何工作的。谢谢。现在我发现了一个更大的问题。我使用的是 Management Studio 2008,数据库是 2000。我认为它是 2005 年是错误的。 我还没有使用管理工作室 2008(我们正在运行 2005)。 Management Studio 2005 向后兼容 2000。【参考方案13】:

Excel + SQLCMD + Perl = exceltomssqlinsert

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

【讨论】:

【参考方案14】:

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

希望对你有帮助

-D

【讨论】:

【参考方案15】:

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

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

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

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

要获得有关运行时的概述,请参阅'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine

【讨论】:

以上是关于使用EXCEL将数据导入SQLSERVER数据库时,内容是数字的列导入后全都是NULL值,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

将excel数据导入SQLServer2005

如何将excel导入到sqlserver数据库

sqlserver 数据导入MySQL

从 Excel 到 SQL Server 的数据导入无法导入所有数据

sqlserver怎么将excel表的数据导入到数据库中

从 excel 导入数据时防止 SQL Server 2008 中的行重复