【问题标题】:Need help to debug T-SQL stored procedure that has sql scripts stored in a table需要帮助来调试具有存储在表中的 sql 脚本的 T-SQL 存储过程
【发布时间】:2013-08-26 19:50:22
【问题描述】:

在这个存储过程中,我从名为M_SopInsert 的第三方供应商表中读取数据。

SQLScript 是列名,此表中的每条记录都包含一个 SQL 查询,该查询执行 UPDATEINSERTDELETE

当我使用 Select 调试它时,我可以看到实际的脚本(在下面评论)。但是脚本本身没有执行,我没有看到任何错误。

我尝试硬编码下面的UPDATE 语句,它工作正常。

这可能是什么问题?

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
declare @sopScript nvarchar(1000)

select SQLScript into #ControlTbl from  M_SopInsert 
where soptype = @I_vSOPTYPE and sopnumbe = @I_vSOPNUMBE and lnitmseq = @I_vLNITMSEQ

while exists (select * from #ControlTbl)
begin

   select top 1 @sopScript = SQLScript
   from #ControlTbl

   --exec executesql @sopScript = SQLScript 
   --select @sopScript
   --EXEC sp_executesql @sopScript;
   --EXEC sp_executesql "update SOPQty set QTYORDER = '17.89' where LNIT = '16'"
exec sp_executesql @sopScript = SQLScript
   delete from #ControlTbl where SQLScript = @sopScript

end
drop table #ControlTbl
return (@O_iErrorState)

【问题讨论】:

  • 你说你已经更正以使其工作的语法错误应该产生Msg 2812, Could not find stored procedure 'SQLScript'. - 这是所有代码,还是包裹在TRY/CATCH或其他东西中?

标签: stored-procedures sql-server-2008-r2 while-loop sql-update sp-executesql


【解决方案1】:

您没有看到任何错误,因为您有一个空的捕获。这就像设置闹钟然后拔掉它。您可能会遇到的错误是您不能将VARCHAR 字符串传递给sp_executesql - 它必须是NVARCHAR。试试:

declare @sopScript Nvarchar(1000)
-------------------^

【讨论】:

  • 我实际上已经删除了 catch 块,但是在发布我的帖子时,我没有删除它。所以目前没有catch块。更改为 nvarchar 也没有任何更改。出于某种原因,当我有 varchar 时,下面的行不起作用。 exec executesql @sopScript = SQLScript
  • @Anirudh 加油。调试 101. 您是否尝试仅从#ControlTbl 中选择而不是循环并执行内容?也可能是 #temp 表中没有插入任何行。也可能是您正在一个数据库上执行它并检查命令是否在另一个数据库上执行。您的连接字符串中是否包含AttachDbFileName
  • 我用“exec sp_executesql @sopScript”替换了“exec sp_executesql @sopScript = SQLScript”,它起作用了。我不知道每个有什么区别。
【解决方案2】:

我用“exec sp_executesql @sopScript”替换了“exec sp_executesql @sopScript = SQLScript”,它起作用了。我不知道它会有什么不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 2011-03-18
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多