Première procédure stockée – Impossible d'get variable au travail

C'est ma première tentative d'écriture d'une procédure stockée. J'essaie d'get une list de toutes les commands passées entre deux dates. Je courrais ce proc tous les mois, recevant les commands pour les six derniers mois. Si je l'ai exécuté le 2 ou le 15 du mois, cela prendrait encore 6 mois avant la fin du mois précédent.

Voici le code:

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; 

Quand je lance le proc, j'obtiens ce message d'erreur:

La procédure ou la fonction 'pMonthlyCustomerReport' attend le paramètre '@enddate', qui n'a pas été fourni.

Toutes les suggestions ou les meilleures pratiques que je devrais utiliser ici? Je suis peut-être trop en train de créer @enddate , @startdate et @startdate devrais juste les mettre dans la requête, mais je veux que la variable soit déclarée à l'avance.

Des pensées?

Merci

Vous pouvez simplement déclarer les vars @startdate et @enddate au lieu d'en faire des parameters pour le sp, puisque vous les définissez en fonction de la date actuelle:

 DECLARE @startdate datetime DECLARE @enddate datetime 

puis déclarez-le comme ceci:

 CREATE PROCEDURE pMonthlyCustomerReport AS 

Vous avez deux problèmes ici. Le premier est que vous déclarez des parameters d'input pour lesquels vous ne fournissez pas de valeurs (ce qui n'est évidemment pas votre intention). Solution: Mettez-les après l' AS et utilisez DECLARE pour les déclarer comme variables locales.

Le deuxième problème est que vous essayez de définir une valeur des parameters d'input déclarés. Ce problème sera résolu avec le premier changement.

Mettre

 declare @enddate date declare @startdate date 

après le

 AS 

ils ne sont donc pas déclarés en tant que parameters à fournir lors de l'appel de la procédure.

Vous requestz des parameters, remplacez @enddate et @startdate par des variables locales en utilisant des instructions de déclaration.