Это ваша проблема:
from dbo.Invoices inc as TotalCost
SQL Server будет неявно псевдоним вашей таблицы без ключевого слова AS
.Таким образом, ваш запрос фактически обрабатывается следующим образом:
from dbo.Invoices AS inc AS TotalCost
^ ^
| |
| |
| |
По сути, вы дважды псевдоним своей таблицы, и это неверный синтаксис.
Так что это будет обновленный и правильный код процедуры:
ALTER PROCEDURE dbo.ServicesDetailedReport
@FromDate DATE = '01-Jun-2010',
@ToDate DATE = NULL
AS
BEGIN
SET @ToDate = ISNULL(@ToDate, GETDATE());
SELECT inv.InvoiceNo, inv.EntryDateTime, s.ServiceName, c.VehicleRegNo, inv.ServicePrice, c.CustomerName, inv.fk_BookingID
FROM dbo.services AS s
INNER JOIN invoices AS inv
ON inv.fk_ServiceID = s.ServiceID
INNER JOIN customers AS c
ON c.CustomerID = inv.fk_CustomerID
CROSS JOIN ( SELECT SUM(inc.ServicePrice) AS TotalCost
FROM dbo.Invoices AS inc) AS t
WHERE inv.EntryDateTime BETWEEN @FromDate AND @ToDate;
END;
Также обратите внимание, что я заменил вашу инструкцию case на простой ISNULL()
и удалил лишние операторы преобразования в вашем запросе, они не нужны.