这是我的动态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中的问题。感谢
答案 0 :(得分:2)
执行存储过程有EXEC
。当然,没有名为select * from Customers...
的SP。
还有EXEC()
,一个函数!,用于执行动态创建的语句。
只需使用EXEC(@SQL)
。
另一种具有更多选项的方法是sp_executesql
,并且对参数有广泛的支持。您可以使用它来传递ALFKI
作为参数。否则你可能会打开SQL注入...