#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
У меня есть следующая хранимая процедура SQL, которая, когда я пытаюсь ее сохранить, выдает сообщение о «Недопустимом имени столбца ‘Goal'» в последнем операторе select.
Может кто-нибудь сказать мне, почему это недопустимое имя 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
Ответ №1:
Попробуйте запустить его в новом соединении или сначала удалить временные таблицы в отдельном пакете.
Возможно #temp
, таблицы все еще хранятся в предыдущем пакете, когда у вас не было Goal
столбца, и анализатор проверяет имена столбцов на соответствие существующей таблице, обнаруживает ошибку привязки и отказывается запускать пакет.
Если временные таблицы вообще не существуют, компиляция инструкции будет отложена.