存储过程 - 在第二次调用时出错
早上好。 我很新的SQL和存储过程的问题。首先我使用SQL 2008,我不知道这是否有所作为。所以这是我的问题。我调用存储过程,2次在传递不同值的行。(顺便说一句,我只是说了with recompile
一部分。它没有帮助)存储过程 - 在第二次调用时出错
EXECUTE crstored.sp_hhcAllActivityInstreamLoop
@measureVarIDName ='staticPayact6moID'
,@measureSuppVarIDName ='payact6moID'
,@measureDesc ='payact6moDesc'
,@measureSuppTable ='crsupp.payact6mo'
WITH RECOMPILE;
GO
EXECUTE crstored.sp_hhcAllActivityInstreamLoop
@measureVarIDName ='staticJourneyID'
,@measureSuppVarIDName ='journeyID'
,@measureDesc ='journeyDesc'
,@measureSuppTable ='crsupp.journey'
WITH RECOMPILE;
GO
我第一次称呼它,它会跑。第二次,我得到以下几点:
消息207,级别16,状态1,行20无效列名 'staticJourneyID'。消息207,级别16,状态1,行20无效列 名称'staticJourneyID'。
为了解决这个问题,我删除了存储过程。重新编译它的一半,所以它只会引入参数,并用参数之一进行简单的选择。运行。删除存储过程。重新编译完整的程序。然后我可以运行它的第二个电话。然而,现在只能运行JourneyID的东西,如果我必须返回并调用payAct6mos变量,我必须运行相同的删除,重新编译和运行场景。有没有人有什么建议?我现在唯一能想到的就是拥有不同名称的相同代码的两个副本。我讨厌必须保持这一点。
另外,我不知道,如果它使,而是因为我是如何使用参数的差异,有人告诉我,附上我的代码在存储过程中使用:
select @[email protected]+' type line of code here '
谢谢!
只是我的问题的后续行动。我想到了。就像我说的,我只是SQL的新手。所以,结果我丢掉的表格,我在SP中使用动态SQL。只要我使用“常规”SQL删除它们,调用就可以正常运行。我不确定这是为什么,但是你有它。感谢大家的帮助。
这是猜测。我最好的猜测是存储过程的第二部分是使用动态SQL。它使用@measureVarIDName
中的名称构造SQL语句。
列staticPayact6moID
存在于它正在查看的表中。
表中不存在列staticJourneyID
。
换句话说,您需要在第二次调用中修复第一个参数(至少)。
你是绝对正确的。我正在使用动态SQL,并使用参数来创建一些代码。这是否意味着它保留了缓存中的内容,因为一旦我重新编译了SP,我就可以用staticJourneyID运行调用SP,而不会有任何问题。 – user2370154 2013-05-10 14:02:55
@ user2370154。 。 。根据我的经验,存储过程的参数工作得很好。您需要发布存储过程的代码以获取更多指导。另一件事。 。 。在存储过程调用中包含数据库的名称,以确保每次都调用相同的代码。 – 2013-05-10 14:06:45
向我们展示存储过程代码。 – RBarryYoung 2013-05-10 13:42:35
因此,我无法发布SP,因为它的字符太多。 – user2370154 2013-05-10 15:02:34