【问题标题】:SQLServer: Dynamic sql raise exception Could not find stored procedureSQLServer:动态 sql 引发异常找不到存储过程
【发布时间】:2018-02-16 12:52:02
【问题描述】:

这是我的动态 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然后我得到错误调用

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

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

【问题讨论】:

  • 为什么这么简单的查询需要动态sql?

标签: sql-server dynamic-sql


【解决方案1】:

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

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

只需改用EXEC(@SQL)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    相关资源
    最近更新 更多