Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment sélectionner des enregistrements qui n'existent pas dans Sql Server

Vous pouvez le faire avec un CTE . Quelque chose comme ça :

DECLARE @startDate datetime = '2/1/2014'
DECLARE @endDate datetime = '2/6/2014'

;WITH DateRange(RunningDate) AS
(
    SELECT @startDate AS RunningDate
    UNION ALL
    SELECT RunningDate + 1
    FROM DateRange
    WHERE RunningDate < @endDate
)

SELECT id, RunningDate date, value1, value2 
FROM DateRange LEFT JOIN myTable ON myTable.date = DateRange.RunningDate

Modifier... SI vous optez pour cette solution (prenez note du commentaire d'Aaron Bertrand sous ma réponse), notez que vous devrez également spécifier le récursivité maximale si vous avez l'intention de traiter des plages supérieures à 3 mois. La valeur par défaut est 100. Cela signifie que, comme la requête est actuellement écrite, elle ne fera qu'un maximum de 101 dates (100 niveaux de récursivité).

Vous pouvez également spécifier OPTION (MAXRECURSION 0) à la fin du dernier SELECT pour surmonter cela. 0 signifie des niveaux infinis de récursivité. Mais encore une fois, prenez note du message d'Aaron.