我正在使用Visual Studio 2017开发报告网站。我的所有 SQL查询都已参数化并且正常运行。问题出在一些像过程一样有exec命令的查询中。
例如:
而不是SELECT * FROM tabla WHERE id=@id
我放了exec('SELECT * FROM tabla WHERE id=@id')
exec 案例不起作用。错误消息是:
必须声明标量变量“”@id“”。“& vbCrLf&”必须声明标量变量“”@id“”。“ 有人知道可能的解决方案吗?
非常感谢!
答案 0 :(得分:4)
如果您在"可参数化"中使用参数位置(即您没有尝试参数化表/列名称),您可以使用sp_executesql
继续使用参数:
exec sp_executesql N'select * from tabla where id=@id',N'@id int',@id = @id
使用exec
创建一个新的上下文,该上下文无法访问任何外部变量/参数,但sp_executesql
允许您将变量显式传递到内部上下文中。 (并不要求内部和外部变量名称相同,但保持它是最简单的)