0

在这个存储过程中,我从名为M_SopInsert.

SQLScript是列名,并且此表中的每条记录都包含一个执行UPDATE,INSERT或的 SQL 查询DELETE

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

2 回答 2

3

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

declare @sopScript Nvarchar(1000)
-------------------^
于 2013-08-26T20:08:23.683 回答
0

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

于 2013-08-27T14:55:32.033 回答