2012-03-16 1 views
0

Надеюсь, это отформатировано правильно. У меня возникла проблема с этой процедурой. Я лишил декларацию, и то, что вы видите, является основным телом. Все, что я пытаюсь сделать, это создать переменную таблицы (в 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 раз:

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

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

ответ

0

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

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

+0

Упс. Я забыл, что я изменил имя столбца с AccountUserId на UserId. Это только один из тех случаев, когда помогает вторая пара глаз. Большое спасибо. – busha