2013-03-02 115 views
3

我必须将Excel模板复制到另一个文件夹才能导入数据。以下是我使用两个SQL语句:无法使用SQL Server 2008 R2中的OPENROWSET导入到Excel

insert into 
OPENROWSET('Microsoft.ACE.OLEDB.12.0' 
    , 'Excel 12.0;Database=C:\inetpub\wwwroot\app_data\tmp\myExport130301172218.xls;' 
    , 'SELECT * FROM [Sheet1$]') 
SELECT * FROM vw_shrub 

如果我单独执行上面的SQL语句,它们工作得很好:

语句1:

exec xp_cmdshell 'copy C:\inetpub\wwwroot\app_data\export_templates\myExport.xlsx C:\inetpub\wwwroot\app_data\tmp\myExport130301172218.xls' 

声明2。但是,如果我一起执行它们,它提出了以下错误:

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "The Microsoft Access database engine could not find the object 'Sheet1$'. Make sure the object exists and that you spell its name and the path name correctly. If 'Sheet1$' is not a local object, check your network connection or contact the server administrator.".

Msg 7350, Level 16, State 2, Line 2
Cannot get the column information from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

的问题是我想从我作为单一的请求的应用程序通过他们俩。因此,我必须一起执行它们。我发现我可以在Management Studio中一起执行它们,如果我在它们之间添加GO。但是当我通过我的应用程序的请求时,我无法使用GO。

+0

为什么复制中的路径与OPENROWSET – 2013-03-02 02:13:24

+0

中的路径不同我很抱歉Speot。当我在我的问题中写样本时,这是一个错误。但问题仍然存在。我更新了这个问题。谢谢。 – Fred 2013-03-02 09:12:49

+0

为什么不创建存储过程,而是从您的应用程序调用该过程 – Raymund 2013-03-04 20:44:25

回答

0

您是否尝试在exec语句后添加GO?

连接到SQL Server的帐户是否具有对SQL Temp目录的读/写访问权限?我的理解是,SQL会将xls文件复制到它的临时目录,并且如果您的用户没有管理权限或windows对temp目录的读/写权限,则连接将失败。

+0

它连接到sql服务器。正如我提到的,如果我在mng studio中使用Go,它就可以工作。但我不能在我的代码中使用t-sql – Fred 2013-03-04 22:51:57

+0

您可能会误解。如果你使用用户帐户BlahBlah连接到SQL Server,BlahBlah对SQL Server临时目录(不知道路径是什么但是类似于C:\ Program Files \ Microsoft \ SQL Server \ 10.0 \ temp)的读/写访问权限? – user1238918 2013-03-05 15:49:16

+0

用户帐户具有读/写权限。正如你在上面的解释中看到的那样,如果我在两者之间运行语句1和语句2,它将完美运行。但是,如果我删除GO线,它不起作用。对我来说,这意味着没有权限问题,因为两种方案都使用相同的用户名 – Fred 2013-03-05 19:41:04

1

另一种可能是使这两条线到一个SQL Server代理作业两个不同的步骤,并用一条指令执行:

sp_start_job nameOfYourJob 

工作行为的两个步骤,就好象有一个GO之间。

+0

好点Zelloss。但是我的问题是为什么SQL Server的行为不同,当你一起运行这两个语句。这种行为有没有合理的解释?当它与GO语句一起使用时,它意味着一切都是正确的,没有权限问题,语法也是正确的。但为什么它必须以两种不同的陈述来运行? – Fred 2013-03-11 15:41:27

+1

我的猜测是,它没有时间结束复制,因为它的异步指令和插入查找excel锁定或仍然复制,就像如果你尝试插入一个你保持打开的excel。也许可以在复制和插入之间的相同目录上测试一个'exec xp_cmdshell'dir''。 – Zelloss 2013-03-11 16:42:59

+0

这可能是正确的答案。但我想知道是否是这种情况,至少应该在最后复制空文件。你不觉得吗? – Fred 2013-03-11 20:51:22

相关问题