2013-05-10 28 views
-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 @[email protected]+'  type line of code here  ' 

謝謝!


只是我的問題的後續行動。我想到了。就像我說的,我只是SQL的新手。所以,結果我丟掉的表格,我在SP中使用動態SQL。只要我使用「常規」SQL刪除它們,調用就可以正常運行。我不確定這是爲什麼,但是你有它。感謝大家的幫助。

+0

向我們展示存儲過程代碼。 – RBarryYoung 2013-05-10 13:42:35

+0

因此,我無法發佈SP,因爲它的字符太多。 – user2370154 2013-05-10 15:02:34

回答

4

這是猜測。我最好的猜測是存儲過程的第二部分是使用動態SQL。它使用@measureVarIDName中的名稱構造SQL語句。

staticPayact6moID存在於它正在查看的表中。

表中不存在列staticJourneyID

換句話說,您需要在第二次調用中修復第一個參數(至少)。

+0

你是絕對正確的。我正在使用動態SQL,並使用參數來創建一些代碼。這是否意味着它保留了緩存中的內容,因爲一旦我重新編譯了SP,我就可以用staticJourneyID運行調用SP,而不會有任何問題。 – user2370154 2013-05-10 14:02:55

+0

@ user2370154。 。 。根據我的經驗,存儲過程的參數工作得很好。您需要發佈存儲過程的代碼以獲取更多指導。另一件事。 。 。在存儲過程調用中包含數據庫的名稱,以確保每次都調用相同的代碼。 – 2013-05-10 14:06:45

相關問題