这是我编写存储过程的第一个镜头。我正在尝试获取两个日期之间所有订单的清单。我会每月运行此程序,获得过去6个月的订单。如果我在本月的2日或15日运行它,它仍然需要从上个月末开始的前6个月。
以下是代码:
CREATE PROCEDURE pMonthlyCustomerReport
-- Get the last day of the previous month and the first day of 6 months ago
@enddate date,
@startdate date
AS
SET @enddate = DATEADD(D,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0));
SET @startdate = DATEADD(M, DATEDIFF(MONTH, 0, GETDATE())-6, 0);
-- Get orders for the past 6 months
SELECT acct_num, date as OrderDate, type as OrderType
INTO #Orders
FROM rders
WHERE date BETWEEN @startdate AND @enddate;
当我运行proc时,我收到此错误消息:
过程或函数'pMonthlyCustomerReport'需要参数'@enddate',这是未提供的。
我应该在这里使用的任何建议或最佳做法?我可能过度思考创建@enddate
,@startdate
并且应该将它们放在查询中,但我希望预先声明变量。
有什么想法吗?
谢谢
答案 0 :(得分:2)
您可以声明变量@startdate和@enddate而不是将它们作为sp的参数,因为您无论如何都是根据当前日期设置它们:
DECLARE @startdate datetime
DECLARE @enddate datetime
然后声明如下:
CREATE PROCEDURE pMonthlyCustomerReport
AS
答案 1 :(得分:2)
这里有两个问题。第一个是你声明你没有提供值的输入参数(这显然不是你的意图)。解决方案:将它们放在AS
之后并使用DECLARE
将它们声明为局部变量。
第二个问题是您正在尝试设置声明的输入参数的值。第一次更改将解决此问题。
答案 2 :(得分:1)
把
declare @enddate date
declare @startdate date
之后
AS
所以它们不会被声明为调用过程时必须提供的参数。
答案 3 :(得分:0)
您要求参数,使用声明语句将@enddate和@startdate更改为局部变量。