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

使用局部变量比较SQL Server中读取的Excel中的数据,sql,sql-server,excel,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 input.XLS有两列ID和NAME。现在,我希望上面的语句只返回一个ID=x的值/行,并将返回的值分配给一个局部变量,如下所示- DECLARE @dbValue varchar(

我正在尝试使用下面的语句从Excel中读取数据,该语句工作得非常好

Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=d:\input.xls','select MyColum from [Sheet1$]')
XLS input.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)返回消息“一个或多个必需参数没有给定值”。
味精7320,16级,状态2,第3行
无法对链接服务器(null)的OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”执行查询“从[Sheet1$]中选择MyClum,其中[ID]=@I”


请提出建议。

也许类似的建议会奏效。但您的问题令人困惑,因为您对Excel文件的查询选择了MyColumn,但您说该文件具有列ID和列名称

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;

类似于
。。。其中[ID]='+Convert(varchar,@I)
将是动态SQL方式,但会有人出现并警告SQL注入漏洞:)但是,您可能需要提前创建查询字符串: