在此存储过程中,我从名为M_SopInsert
的第三方供应商表中读取。
SQLScript
是列名,此表中的每条记录都包含执行UPDATE
,INSERT
或DELETE
的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)
答案 0 :(得分:3)
您没有看到任何错误,因为您有一个空的捕获。这就像设置你的闹钟,然后拔掉它。您可能会遇到的错误是您无法将VARCHAR
字符串传递给sp_executesql
- 它必须是NVARCHAR
。尝试:
declare @sopScript Nvarchar(1000)
-------------------^
答案 1 :(得分:0)
我用“exec sp_executesql @sopScript”替换了“exec sp_executesql @sopScript = SQLScript”并且它有效..我不知道它会有什么不同。