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.
- Appel de la procédure stockée SQL Server dynamic – attend le paramètre qui n'a pas été fourni
- La procédure stockée T-SQL ne returnne pas zéro par COUNT (*) sur un résultat SELECT vide
- La même procédure stockée prend un time différent pour s'exécuter dans SQL Server
- Problème de numéro de ligne SQL Server
- "Syntaxe incorrecte proche …" SQL stocké Proc
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.