早上好。
我对SQL非常陌生并且存储过程存在问题。首先,我使用SQL 2008,我不知道这是否有所作为。所以这是我的问题。我调用一个存储过程,连续两次传入不同的值。(顺便说一句,我刚刚添加了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 @sqlcode=@sqlcode+' type line of code here '
谢谢!
只关注我的问题。我想到了。就像我说的,我只是SQL的新手。因此,结果是我正在删除的表,我正在使用SP中的动态SQL。一旦我使用“常规”SQL删除它们,调用运行正常。我不确定为什么会这样,但你有它。感谢大家的帮助。
答案 0 :(得分:4)
这是猜测。我最好的猜测是存储过程的第二部分是使用动态SQL。它使用@measureVarIDName
中的名称构建SQL语句。
列staticPayact6moID
存在于它正在查看的表中。
表格中不存在列staticJourneyID
。
换句话说,你需要在第二次调用中修复第一个参数(至少)。