2011-09-28 125 views
3

我有以下SQL存儲過程,當我嘗試保存它時,它在最後一個select語句中抱怨「無效的列名'Goal'」。爲什麼這是SQL存儲過程中的無效列?

有人能告訴我爲什麼這是一個無效的comlumn名?我對NetSales做的事情基本上是一樣的,它不會抱怨這一欄。

if object_id('tempdb..#tmpHours') is not null 
    DROP TABLE #tmpHours 
if object_id('tempdb..#tmpPay') is not null 
    DROP TABLE #tmpPay 

SET @MondayOfCurrentWeek = (SELECT DATEADD(wk, DATEDIFF(wk,0,@WeekOf), 0)) 

SELECT p.PerceptionistID AS PerceptionistID, p.BaseCommission AS BaseCommission, p.BonusCommission AS BonusCommission, 
     h.WeekOf AS WeekOf, h.WorkHours AS WorkHours, h.PTOHours AS PTOHours, h.HolidayHours AS HolidayHours, 
     ROUND(h.WorkHours, 0) AS HoursRounded, 
     (
      SELECT COUNT(c.PerceptionistID) 
      FROM T_Call c 
      WHERE 
       c.PerceptionistID = p.PerceptionistID 
       AND c.OutcomeID = @OutcomeSale 
       AND EnteredOn BETWEEN @MondayOfCurrentWeek AND DATEADD(dd, 7, @MondayOfCurrentWeek) 
     ) AS GrossSales, 
     (
      SELECT COUNT (c.PerceptionistID) 
      FROM T_CallCredit cc 
       INNER JOIN T_Call c 
        ON cc.CallID = c.CallID 
      WHERE 
       c.PerceptionistID = p.PerceptionistID 
       AND cc.CallCreditStatusID NOT IN (17, 18) -- 17 - 'Error in Customer Account', 18 - 'Courtesy Credit' 
       AND cc.EnteredOn BETWEEN @MondayOfCurrentWeek AND DATEADD(dd, 7, @MondayOfCurrentWeek) 
     ) AS Credits 

INTO #tmpHours 
FROM T_Perceptionist p 
    RIGHT JOIN T_PerceptionistHours h 
     ON p.PerceptionistID = h.PerceptionistID 
WHERE h.WeekOf = @MondayOfCurrentWeek 


SELECT PerceptionistID, CAST((HoursRounded*2) AS int) AS Goal, GrossSales, Credits, (GrossSales - Credits) AS NetSales, 
     HoursRounded, WorkHours, PTOHours, HolidayHours, BaseCommission, BonusCommission, 
     [dbo].fnCalculateCommission(BaseCommission, BonusCommission, (GrossSales - Credits), CAST((HoursRounded*2) AS int)) AS CommissionPay 
INTO #tmpPay  
FROM #tmpHours 


--- Complains about column name 'Goal' in the following statement 
SELECT PerceptionistID, Goal, GrossSales, Credits, NetSales, HoursRounded, WorkHours, PTOHours, 
     HolidayHours, BaseCommission, BonusCommission, CommissionPay 
FROM #tmpPay 

回答

6

嘗試在新連接中運行它,或者首先在單獨的批處理中刪除臨時表。

當您沒有Goal列並且解析器根據現有的表驗證列名,遇到綁定錯誤並拒絕運行批處理時,可能#temp表仍然懸掛在前一批中。

如果臨時表不存在,則所有語句的編譯將被延遲。

+0

謝謝,這個伎倆! – BrianKE