Question

Je travaille avec SQL Server Reporting Services 2008, ce qui est un peu nouveau pour moi, comme la plupart de mon expérience avec le développement LAMP. De plus, le déplacement le plus de la logique à SQL que les procédures stockées est quelque chose que je ne suis pas très familier avec, mais je voudrais faire. Toute aide ou direction serait grandement apprécié.

Je besoin d'une liste des dates de paie acceptables sous la forme d'une table à utiliser comme les valeurs autorisées pour un paramètre de rapport. Idéalement, la personne sera en mesure de choisir cette date de la paie de la condition déroulante par le paramètre de rapport, qui sera ensuite utilisé dans l'ensemble de données pour extraire des données d'une table. Je voudrais que la logique doit être stocké sur le serveur SQL si possible, car cela est quelque chose qui sera utilisée le plus probable sur quelques autres rapports.

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

Il me semble que le chemin à parcourir sur ce 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 peut le lire. Est-ce une façon acceptable d'aller à ce sujet?

Des idées, des exemples ou des pensées serait grandement apprécié.

Était-ce utile?

La solution

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 encore, bien sûr.

Autres conseils

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 zone de texte: date de début et date de fin et par défaut les valeurs raisonnables, juste mes 2 cents

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top