おはよう。私は 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
初めて呼び出すと、実行されます。2回目は次のようになります。
メッセージ 207、レベル 16、状態 1、行 20 列名 'staticJourneyID' が無効です。メッセージ 207、レベル 16、状態 1、行 20 列名 'staticJourneyID' が無効です。
それを修正するために、ストアド プロシージャを削除します。途中で再コンパイルして、パラメーターを取り込み、パラメーターの 1 つを使用して単純な選択を行うだけです。それを実行します。ストアド プロシージャを削除します。完全な手順を再コンパイルします。その後、2 番目の呼び出しで実行できます。ただし、現在は JourneyID 用にのみ実行するように設定されており、前に戻って payAct6mos 変数を呼び出す必要がある場合は、同じ削除、再コンパイル、実行のシナリオを実行する必要があります。誰か提案はありますか?私が今思いつく唯一のことは、同じコードの 2 つのコピーを別の名前で持つことです。私はそれを維持しなければならないのは嫌です。
また、それが違いを生むかどうかはわかりませんが、パラメーターの使用方法のために、コードをストアド プロシージャで囲むように言われました。
select @sqlcode=@sqlcode+' type line of code here '
ありがとう!
私の問題のフォローアップです。私はそれを考え出した。私が言ったように、私はSQLの初心者です。だから、私が削除していたテーブルが判明しました.SPで動的SQLを使用して削除していました。「通常の」SQL を使用してそれらをドロップするとすぐに、呼び出しは正常に実行されました。それがなぜなのかはわかりませんが、そこにあります。みんなの助けに感謝します。