需要帮助调试将SQL脚本存储在表中的T-SQL存储过程



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

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

当我使用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)

您没有看到任何错误,因为您有一个空捕获。这就像设置闹钟,然后拔下它。你可能会得到的错误是,你不能将VARCHAR字符串传递给sp_executesql——它需要是NVARCHAR。尝试:

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

我用"exec sp_executesql@sopScript"替换了"exec p_executesql:sopScript",它成功了。。我不知道这会有什么不同。

相关内容

  • 没有找到相关文章

最新更新