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

SQLServer: Dynamic sql raise exception Could not find stored procedure

这是我的动态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 是正确的但是当我用 exec @SQL 替换 print @SQL 并执行动态 sql然后我又收到错误消息

Msg 2812, Level 16, State 62, Line 8 Could not find stored procedure 'select * from Customers Where CustomerID='ALFKI''.

不清楚我哪里弄错了。请给我一些提示,上面的动态 sql 中的问题在哪里。谢谢

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

的 SP

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

只需使用 EXEC(@SQL) 即可。

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