使用局部变量来比较在SQL Server中读取的Excel中的数据

时间:2014-05-11 15:27:33

标签: sql sql-server excel

我正在尝试使用以下语句从Excel中读取数据,该语句非常正常

Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=d:\input.xls','select MyColum from [Sheet1$]')

XLS inpout.xls有两列ID和NAME。现在我希望上面的语句只返回ID = x的一个值/行,并将返回的值赋给局部变量,如下所示 -

DECLARE @dbValue varchar(20)
DECLARE @I int

SET @I = 1

Select @dbValue = (Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=d:\input.xls','select MyColum from [Sheet1$] where [ID]=@I'))

这会返回错误

  

OLE DB提供程序" Microsoft.Jet.OLEDB.4.0"对于链接服务器"(null)"返回消息"没有给出一个或多个必需参数的值。"。
  Msg 7320,Level 16,State 2,Line 3
  无法执行查询"从[Sheet1 $]中选择MyColum,其中[ID] = @ I"针对OLE DB提供程序" Microsoft.Jet.OLEDB.4.0"对于链接服务器"(null)"。

请建议。

1 个答案:

答案 0 :(得分:0)

也许这样的事情会起作用。但是你的问题很混乱,因为你对Excel文件的查询选择了MyColumn,但是你说该文件有列ID和NAME。

DECLARE @dbValue varchar(20)
DECLARE @I int

SET @I = 1

Select @dbValue = NAME FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=d:\input.xls','select ID from [Sheet1$]') as T
WHERE ID=@I;