SQLServer:动态sql引发异常无法找到存储过程

时间:2018-02-16 12:52:03

标签: sql-server dynamic-sql

这是我的动态sql。

DECLARE @SQL varchar(MAX)
DECLARE @Data varchar(MAX)
SET @Data='ALFKI'' OR ContactName=''Ana Trujillo'''
SET @SQL='select * from Customers Where CustomerID='''+@Data+''

print @SQL
exec (@SQL)

当我打印然后我得到这个sql select * from Customers Where CustomerID='ALFKI'这个sql是正确的但当我用print @SQL替换exec @SQL并再次执行动态sql然后我收到错误称为

  

Msg 2812,Level 16,State 62,Line 8无法找到存储过程   '从CustomerID ='ALFKI''的客户中选择*。

不清楚我犯了哪个错误。请给我一些提示,上面是动态sql中的问题。感谢

1 个答案:

答案 0 :(得分:2)

执行存储过程有EXEC。当然,没有名为select * from Customers...的SP。

还有EXEC(),一个函数!,用于执行动态创建的语句。

只需使用EXEC(@SQL)

另一种具有更多选项的方法是sp_executesql,并且对参数有广泛的支持。您可以使用它来传递ALFKI作为参数。否则你可能会打开SQL注入...