使用'openrowset'在sql脚本上出错

时间:2010-12-14 08:21:29

标签: sql-server-2005 excel-2010

我的SQL脚本出现问题:

SELECT  
  SP.[MobileNumber],  
  SP.[LastName],  
  SP.[FirstName]  
FROM SampleTable1 SP  
INNER JOIN OPENROWSET  
(  
  'Microsoft.Jet.OLEDB.4.0',  
  'Excel 8.0;Database=C:\devpc11\sample.xls;',  
  'SELECT   
     MobileNumber,   
     LastName,  
     FirstName  
   FROM [SampleData$]') T  
ON SP.[MobileNumber] = T.[MobileNumber]  
GO

当我尝试执行此操作时,会生成此错误:

Msg 7357,Level 16,State 2,Line 1 无法处理对象“SELECT      手机号码,      姓,   名字    FROM [SampleData $]“。链接服务器”(null)“的OLE DB提供程序”Microsoft.Jet.OLEDB.4.0“表示该对象没有列,或者当前用户没有该对象的权限。

这有什么解决方案吗?我真的在过去3个小时内找不到任何东西..基本上,我只想操纵excel文件中的数据,然后将其保存到sql server 2005数据库,但是现在,我想从excel文件中检索数据到sql server ..感谢您的帮助..

1 个答案:

答案 0 :(得分:1)

我在本地使用电子表格。忘了OPENROWSET

  1. 在excel电子表格中创建命名范围。 Tio执行此操作,突出显示所需的列(包括标题),右键单击并选择“命名范围”。给它一个名字,这将是你的表名。

    http://www.homeandlearn.co.uk/me/mes9p2.html

  2. 保存并关闭电子表格。如果你打开它,SQL Server将无法访问它。

  3. 添加链接服务器。按照以下 E部分中的说明操作,告诉您如何为Excel电子表格添加链接服务器:

    http://msdn.microsoft.com/en-us/library/ms190479.aspx

  4. 您应该能够按照说明再次愉快地查询DS。

  5. 以下是适用于我的代码:

    EXEC sp_addlinkedserver 'ExcelSource4',
       'Jet 4.0',
       'Microsoft.Jet.OLEDB.4.0',
       'c:\sqlss.xls',
       NULL,
       'Excel 5.0';
    GO
    
    SELECT *
       FROM ExcelSource4...MyTable2;
    

    最后。开始接受一些答案并投票给任何有用的答案。这是StackOverflow的生命线。