Je suis nouveau dans TSQL. J'ai besoin d'écrire une procédure stockée qui renvoie les loggings filtrés. L'user a donc deux dates à entrer. Il peut entrer seulement une date, ou deux, ou les deux, ou tout.
En proc stocké j'ai deux parameters @From, type @To – date. J'ai besoin de searchr des loggings.
Si l'user n'a pas saisi les dates, je ne me soucie pas des dates dans la requête de sélection.
Si l'user a entré 2 dates – je dois searchr avec eux inclusivement.
Si l'user a entré @From date – j'ai besoin de searchr jusqu'à aujourd'hui inclusivement.
Si l'user a entré @ Date – je dois searchr des dates inférieures à @.
Merci de votre aide.
SELECT ColumnList FROM MyTable WHERE (@FromDate IS NULL OR FromDateColumn >= @FromDate) AND (@ToDate IS NULL OR ToDateColumn <= @ToDate )
(Mais sachez que cela peut souffrir des effets d'un plan de requête mis en cache inadapté en raison d'un reniflage de paramètre, surtout s'il y a un grand nombre de conditions de parameters dans la clause WHERE
)
SELECT Columns FROM Table WHERE DateColumn BETWEEN (CASE WHEN @FromDate IS NULL THEN DateColumn ELSE @FromDate END) AND (CASE WHEN @ToDate IS NULL THEN DateColumn ELSE @ToDate END)