zhu*_*ien 2 t-sql sql-server stored-procedures date
我需要创建一个以供应商名称、开始日期和结束日期为参数的存储过程,并计算给定时间间隔内该供应商的总收入。我正在使用北风。该过程如下所示:
CREATE PROC usp_GetTotalIncomeByPeriod (
@companyName nvarchar(40),
@startDate date,
@endDate date)
AS
BEGIN
SELECT SUM(od.UnitPrice * od.Quantity * (1 - od.Discount))
FROM Orders o
JOIN [Order Details] od
ON o.OrderId = od.OrderId
JOIN Products p
ON od.ProductID = p.ProductID
JOIN Suppliers s
ON p.SupplierID = s.SupplierID
WHERE s.CompanyName = @companyName
AND (o.OrderDate BETWEEN @startDate AND @endDate);
END
GO
Run Code Online (Sandbox Code Playgroud)
问题是我实际上无法使用以下调用执行它:
EXEC dbo.usp_GetTotalIncomeByPeriod @companyName = 'Exotic Liquids',
@startDate = DATEFROMPARTS(1900, 01, 01),
@endDate = DATEFROMPARTS(2000, 1, 1);
Run Code Online (Sandbox Code Playgroud)
DATEFROMPARTS 函数本身似乎可以正常工作,但我无法使其作为参数工作。它不断给我“接近 1900 年的语法不正确”。我想念什么?
函数的括号
DATEFROMPARTS()
Run Code Online (Sandbox Code Playgroud)
导致错误。因此,要么直接传递日期而不使用该函数,要么使用 PLSQL 块通过将 DATEFROMPARTS() 的结果存储在变量中然后将该变量传递给存储过程来执行此操作。
DECLARE
@return_value int,
@vDate1 date,
@vDate2 date
SET @vDate1=DATEFROMPARTS(1900, 01, 01);
SET @vDate2=DATEFROMPARTS(2000, 01, 01);
EXEC @return_value = dbo.usp_GetTotalIncomeByPeriod
@companyName = 'Exotic Liquids',
@startDate = @vDate1,
@endDate = @vDate2;
Run Code Online (Sandbox Code Playgroud)