2010-10-25 4 views
1

Je travaille avec SQL Server Reporting Services 2008, ce qui est quelque peu nouveau pour moi, car la plupart de mon expérience concerne le développement LAMP. En outre, déplacer la majeure partie de la logique vers SQL en tant que procédures stockées est quelque chose que je ne connais pas très bien, mais que j'aimerais faire. Toute aide ou direction serait grandement appréciée.Renvoyer un tableau des dates de paie à partir d'une procédure stockée SQL

J'ai besoin d'une liste de dates de paie acceptables sous la forme d'une table à utiliser comme valeurs autorisées pour un paramètre de rapport. Idéalement, la personne pourra sélectionner cette date de paie à partir de la liste déroulante fournie par le paramètre de rapport, qui sera ensuite utilisée dans l'ensemble de données pour extraire les données d'une table. Je voudrais que la logique soit stockée sur le serveur SQL si possible, car c'est quelque chose qui sera probablement utilisé sur quelques autres rapports.

La logique pour créer la liste des dates est plutôt simple. Cela commence avec la date de paie la plus ancienne qui soit nécessaire pour le système (en 2007) et qui va simplement toutes les deux semaines à partir de là. La procédure ou la fonction doit renvoyer une table qui contient toutes ces dates jusqu'à et y compris la date de paie la plus proche.

Il me semble que la procédure à suivre serait une procédure ou une fonction qui crée une table temporaire, y ajoute la liste des dates, puis retourne cette table afin que le paramètre de rapport puisse la lire. Est-ce une façon acceptable de s'y prendre? Des idées, des exemples ou des pensées seraient grandement appréciés.

Répondre

2

Je voudrais utiliser un CTE quelque chose comme celui-ci:

;WITH PayPeriod AS (
    SELECT @DateIn2007 AS p UNION ALL 
    SELECT DATEADD(dd, 14, p) as P FROM PayPeriod WHERE p < GetDate()) 
SELECT p FROM PayPeriod 
OPTION (MAXRECURSION 500) 

Le MAXRECURSION et/ou lorsque le paramètre limite le nombre de dates qu'il va générer.

Vous pouvez utiliser un paramètre pour déterminer la limite correcte pour obtenir la dernière date correcte, bien sûr.

1

essayer quelque chose comme ceci:

;with AllDates AS 
(
    SELECT CONVERT(datetime,'1/1/2007') AS DateOf 
    UNION ALL 
    SELECT DateOf+14 
     FROM AllDates 
    WHERE DateOf<GETDATE()+14 
) 
SELECT * FROM AllDates 
OPTION (MAXRECURSION 500) 

vous pouvez mettre cela dans une ou fonction.

Cependant, je suggère qu'au lieu de présenter une boîte de sélection de ces nombreuses valeurs, pourquoi ne pas simplement avoir deux champs de la boîte de texte: Date de début et date de fin et les par défaut à des valeurs raisonnables, juste mes 2 cents

+0

Merci! Mon plan initial était d'utiliser une date de début et une date de fin, mais le système d'origine leur demandait de choisir une date de paie, et c'est ce qu'ils voulaient faire. – Matthew

Questions connexes