执行动态 SQL 的正确方法是什么?

时间:2020-12-21 09:12:20

标签: sql sql-server tsql

我们的代码库中有很多 SQL 脚本,它们生成动态 SQL 语句,我们使用

对数据库执行这些语句
EXEC (@FINALSQL)

是这样声明的

 DECLARE @FINALSQL NVARCHAR(MAX);

在我们的一个脚本中,我们现在在执行动态 SQL 时出现错误:

<块引用>

错误编号:2812
错误严重性:16
错误状态:62
错误消息:找不到存储过程

带有以下 SQL 语句。

错误编号与错误消息有关,但仍然找不到有关如何解决此问题的任何相关问题。

我也读过这个问题,但没有帮助,因为我已经将动态 SQL 括在括号中 calling EXEC() generates error: could not find stored procedure

任何可能导致问题的想法?

更新:@FINALSQL 的用途是根据脚本中的条件为表上的金额创建更新。

1 个答案:

答案 0 :(得分:2)

几乎所有动态的答案都可以在 Erland Sommarskog 的文章中找到 巡回演出。

http://www.sommarskog.se/dynamic_sql.html

“Execute”对于执行存储过程时批处理中的第一条语句是可选的。字符串中可能存在一些格式错误,解析器尝试将第一个单词解释为过程名称,否则解析失败。

如果您无法选择捕获字符串,则使用扩展事件会话或跟踪来捕获错误查询。

如果这是一个真正的过程,那么我怀疑当前的数据库是错误的。一个“使用我的数据库;”因为字符串中的第一件事会解决这个问题。但你说事实并非如此。此外,错误消息中未列出过程名称。