2013-04-24 147 views
0

我正在使用Excel 2010和sql server 2008将数据从excel导入到sql server。但我没有成功。你能检查一下我在做什么吗?将Excel 2010导入到Sql Server 2008中

sp_CONFIGURE 'show advanced options',1 
RECONFIGURE 
GO 

sp_CONFIGURE 'optimize for ad hoc workloads',1 
RECONFIGURE 
GO 

sp_configure 'Ad Hoc Distributed Queries', 1 
GO 
RECONFIGURE 


SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\Users\anayak\AppData\Roaming\Microsoft\Templates\Book1.xlsx; HDR=YES;IMEX=1','SELECT * FROM [sheet1$]'); 

我在哪里得到这个错误

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error". 
Msg 7303, Level 16, State 1, Line 1 
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)". 

我安装了Microsoft Access数据库引擎2010可再发行的Microsoft.ACE.OLEDB.12.0。

但是,当我使用命令“ODBCAD32.EXE”来检查我的Excel的版本,然后我得到14.00.4760.1000。

然后我想我的连接字符串 -

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.14.0','Excel 14.0;Database=C:\Users\anayak\AppData\Roaming\Microsoft\Templates\Book1.xlsx; HDR=YES;IMEX=1','SELECT * FROM [sheet1$]'); 

但同样没有工作。

你可以请你建议我在这里做错了吗?

谢谢。

+0

请提供您使用的操作系统名称 – 2013-04-24 10:33:50

+0

Windows 7 32位和SQL Server 2008 32位.. – abhijith 2013-04-24 10:34:52

+0

尝试关闭UAC。 – 2013-04-24 10:35:46

回答

0

回复:7303错误

Distributed Queries in SQL Server, data from XLS

所以你的主要错误是可能这一点;

OLE DB provider "MICROSOFT.JET.OLEDB.4.0" for linked server "(null)" returned message "Unspecified error". 
Msg 7303, Level 16, State 1, Line 1 
Cannot initialize the data source object of OLE DB provider "MICROSOFT.JET.OLEDB.4.0" for linked server "(null)". 

我会检查一些权限。

检查Temp文件夹

这是必需的,因为供应商使用的临时文件夹,而检索数据的权限。根据您是使用本地系统帐户还是网络域帐户,该文件夹可以是以下其中一个文件夹。

对于网络帐户,文件夹是

\的Windows \ ServiceProfiles \网络服务\应用程序数据\本地的\ Temp

和本地系统帐户的\的Windows \ ServiceProfiles \本地服务\应用程序数据\本地的\ Temp

右键单击此文件夹,并授予它对执行代码的帐户(或组)的写入权限。这解决了我的错误。

而且

http://blogs.msdn.com/b/spike/archive/2008/07/23/ole-db-provider-microsoft-jet-oledb-4-0-for-linked-server-null-returned-message-unspecified-error.aspx

这是因为SQL Server服务试图写入临时DSN为登录的temp文件夹启动该服务,在这种情况下,管理员/管理员登录。 临时文件夹类似于:C:\ Documents and Settings \ Admin \ Local Settings \ Temp .15如上所述,OleDbProvider将始终在初始化它的用户的上下文中执行,在这种情况下User/User 。 .16用户/用户对此文件夹没有权限(C:\ Documents and Settings \ Admin \ Local Settings \ Temp)。 如果在执行SQL时运行FileMon的,我们可以看到以下内容: (实际上,尝试使用进程监视器 - http://technet.microsoft.com/en-us/sysinternals/bb896645

SQLSERVR.EXE:000查询信息C:\ DOCUME〜1 \ ADMINI〜1 \ LOCALS〜1 \ Temp访问被拒绝属性:错误

所以总结到目前为止: SQL Server服务以Admin/Admin身份启动,当进行选择时,OleDb提供程序由User/User调用。 现在,OleDb提供程序尝试在临时目录中创建临时DSN。这将是SQL Server服务的临时目录(管理员/管理员) ,但用户(本例中为用户/用户)对此文件夹没有写入权限。并发生错误。

有两种方法可以解决这个问题。

选项1: 登录从机器中并登录作为启动SQL Server服务(在这种情况下管理/管理员)的帐户,然后启动命令提示符 并键入“设置T”(没有引号),这将显示类似:

TEMP = C:\ DOCUME〜1个\管理员\ LOCALS〜1个\温度 TMP = C:\ DOCUME〜1名\管理员\ LOCALS〜1个\温度

这些是为%TEMP%和%TMP%设置的环境变量,因此转到该文件夹​​并右键单击并选择属性 - >安全性, 然后添加用户,在第大小写用户/用户,请注意用户的默认设置是读取&执行/列出文件夹内容/读取,这还不够,您还必须选择写入。

注销,然后以用户/用户身份再次登录并重新运行来自SSMS的命令。这一次它应该工作。

选项2: 登录为管理员和改变TEMP和TMP变量,例如,C:\温度,基本上这个移动Temp目录出文件和设置文件夹的。 但是,您必须重新启动SQL服务器才能使其生效。

因此,基本上,当SQL Server启动时,它使用启动帐户(Admin/Admin)的Temp文件夹,但MICROSOFT.JET.OLEDB.4.0将始终执行 作为调用SQL的用户命令(用户/用户),并且这将失败,除非该用户不具有对该临时文件夹的写入权限。

不知道所有的设置,或许选项2是首选的解决方案,因为使用选项1,您将不得不添加所有将调用提供者的用户,这可能不实际。 此外,更改SQL Server服务的启动帐户时,将使用该帐户的TEMP目录,并且您将再次看到该错误,直到您再次为此TEMP文件夹上的所有用户授予写入权限。或用户组(首选)。

相关问题