-1

早上好。我对 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 @sqlcode=@sqlcode+'      type line of code here     '

谢谢!


只是我的问题的后续行动。我想到了。就像我说的,我只是 SQL 的新手。所以,原来我要删除的表是在 SP 中使用动态 SQL 删除的。一旦我使用“常规” SQL 删除它们,调用就运行良好。我不知道为什么会这样,但你有它。感谢大家的帮助。

4

1 回答 1

4

这是猜测。我最好的猜测是存储过程的第二部分是使用动态 SQL。它正在使用中的名称构造 SQL 语句@measureVarIDName

该列staticPayact6moID存在于它正在查看的表中。

staticJourneyID表中不存在该列。

换句话说,您需要在第二次调用中(至少)修复第一个参数。

于 2013-05-10T13:40:27.810 回答