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 注射...
这是我的动态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...
.
还有EXEC()
,一个函数!,用来执行动态创建的语句。
只需使用 EXEC(@SQL)
即可。
另一种具有更多选项的方法是 sp_executesql
,它广泛支持参数。您可以使用它来传递 ALFKI
作为参数。否则你可能会接受 SQL 注射...