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

Stored procedures 需要帮助调试将SQL脚本存储在表中的T-SQL存储过程吗,stored-procedures,sql-server-2008-r2,while-loop,sql-update,sp-executesql,Stored Procedures,Sql Server 2008 R2,While Loop,Sql Update,Sp Executesql,在这个存储过程中,我从名为M_SopInsert的第三方供应商表中读取数据 SQLScript是列名,此表中的每个记录都包含一个执行更新、插入或删除操作的SQL查询 当我使用下面的Select调试它时,我可以看到实际的脚本。但是脚本本身没有执行,我没有看到任何错误 我尝试在下面硬编码一个更新语句,效果很好 这里可能有什么问题 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO declare @sopScript nvarchar(1000) se

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

SQLScript是列名,此表中的每个记录都包含一个执行更新、插入或删除操作的SQL查询

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

我尝试在下面硬编码一个更新语句,效果很好

这里可能有什么问题

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。尝试:


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


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

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

实际上,我已经卸下了挡块,但在放我的帖子时,我没有卸下它。因此,目前没有拦网。同时,更改为nvarchar也没有任何更改。出于某种原因,当我使用varchar时,下面的行不起作用。exec executesql@sopScript=SQLScript@Anirudh来吧调试101。您是否尝试从ControlTbl中进行选择,而不是循环和执行内容?也可能是临时表中没有插入行。也可能是您在一个数据库中执行它,并检查命令是否在另一个数据库中执行。你的连接字符串中有AttachDbFileName吗?我用exec sp_executesql@sopScript=SQLScript替换了exec sp_executesql@sopScript,它成功了。。我不知道它们之间有什么区别。我实际上已经移除了挡块,但在放置帖子时,我没有移除它。因此,目前没有拦网。同时,更改为nvarchar也没有任何更改。出于某种原因,当我使用varchar时,下面的行不起作用。exec executesql@sopScript=SQLScript@Anirudh来吧调试101。您是否尝试从ControlTbl中进行选择,而不是循环和执行内容?也可能是临时表中没有插入行。也可能是您在一个数据库中执行它,并检查命令是否在另一个数据库中执行。你的连接字符串中有AttachDbFileName吗?我用exec sp_executesql@sopScript=SQLScript替换了exec sp_executesql@sopScript,它成功了。。我不知道它们之间有什么区别。您所说的为使其正常工作而纠正的语法错误应该产生Msg 2812,但找不到存储过程“SQLScript”。-这是全部代码,还是用TRY/CATCH或其他方式包装?您所说的为使其正常工作而纠正的语法错误应该产生Msg 2812,但找不到存储过程“SQLScript”。-这是全部代码,还是用TRY/CATCH或其他东西包装?
declare @sopScript Nvarchar(1000)
-------------------^