Sql server SQLServer:动态sql raise异常找不到存储过程

Sql server SQLServer:动态sql raise异常找不到存储过程,sql-server,dynamic-sql,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) 当我打印时,我从CustomerID='ALFKI'这个sql是正确的客户那里得到这个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)
当我打印时,我从CustomerID='ALFKI'这个sql是正确的客户那里得到这个
sql select*,但是当我用
exec@sql
替换
print@sql
并再次执行动态sql时,我得到了错误调用

Msg 2812,级别16,状态62,第8行找不到存储过程 '从CustomerID='ALFKI''的客户中选择*'


不清楚我在哪里犯的错误。请给我一些提示,上面的动态sql中的问题在哪里。感谢有
EXEC
来执行存储过程。当然,没有名为
select*from Customers…
的SP

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

只需使用
EXEC(@SQL)
即可


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

为什么需要一个动态sql来实现这样一个简单的查询?