Потенциальная проблема с наложением псевдонима временной таблицы в запросе дополнительного выбора - PullRequest
0 голосов
/ 16 марта 2012

Надеюсь, это правильно отформатировано. У меня проблема с этой процедурой. Я снял декларацию, и то, что вы видите, является основной частью. Все, что я пытаюсь сделать, это создать переменную таблицы (в SQL SERVER 2000) и извлечь некоторые метрики из данных, содержащихся в.

DECLARE @InvoiceData TABLE
(
UserID      INT
, FullName  VARCHAR
, StatusId  INT
, Status    VARCHAR
, DateCreated DATETIME
)

--INSERT INTO @InvoiceData(UserID, FullName, StatusId, Status, DateCreated)
SELECT
tblInvoiceInstructions.AccountantUserId
, Users.Name + ', ' + Users.First_Name AS FullName
, tblInvoice.CurrentWorkflowStatusId AS StatusID
, dbo.ufnGetGenericCodeLongDescText(tblInvoice.CurrentWorkflowStatusId,GETDATE()) AS Status
, CONVERT(VARCHAR, tblInvoice.DateCreated, 101) AS DateCreated
FROM tblInvoiceInstructions
JOIN tblInvoice ON tblInvoice.Project_ID = tblInvoiceInstructions.ProjectID
LEFT JOIN dbo.Users ON tblInvoiceInstructions.AccountantUserId = Users.UserId
WHERE tblInvoice.DateCreated BETWEEN @StartDate AND @EndDate


SELECT FullName, InvoicesAssigned, InvoicesApproved, InvoicesRejected, InvoicesAssigned-InvoicesApproved-InvoicesRejected AS InvoicesRemaining
FROM 
(
SELECT DISTINCT FullName
,ISNULL((SELECT COUNT(t2.StatusID) FROM @InvoiceData t2 WHERE t2.AccountantUserId = T1.AccountantUserId GROUP BY FullName),0) AS InvoicesAssigned
,ISNULL((SELECT COUNT(t2.StatusID) FROM @InvoiceData t2 WHERE t2.StatusID = 394 AND t2.AccountantUserId = T1.AccountantUserId GROUP BY FullName),0) AS InvoicesApproved
,ISNULL((SELECT COUNT(t2.StatusID) FROM @InvoiceData t2 WHERE t2.StatusID = 388 AND t2.AccountantUserId = T1.AccountantUserId GROUP BY FullName),0) AS InvoicesRejected
FROM @InvoiceData T1
) AS InnerTable

Когда я выполняю хранимую процедуру, 6 раз выдает следующую ошибку:

Сообщение 207, Уровень 16, Состояние 3, Процедура uspReportInvoicesProcessedAndWaiting, строка 31 Неверное имя столбца 'AccountantUserId'.

Строка 31 - это внешний выбор, где я извлекаю значения для FullName, InvoicesAssigned, InvoicesApproved и так далее. Я неправильно совмещаю таблицы?

1 Ответ

0 голосов
/ 16 марта 2012

Проверьте эту строку во втором запросе.

ISNULL((SELECT COUNT(t2.StatusID) FROM @InvoiceData t2 
WHERE t2.AccountantUserId = T1.AccountantUserId GROUP BY FullName),0) 
AS InvoicesAssigned

ПРИМЕЧАНИЕ: @InvoiceData Псевдоним t2 не имеет определенного столбца AccountantUserId . t2.AccountantUserId не существует.

Проверьте определение таблицы @InvoiceData

...