sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo seleccionar registros que no existen en Sql Server

Podría hacer esto con un CTE . Algo como esto:

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

Editar... SI opta por esta solución (tome nota del comentario de Aaron Bertrand debajo de mi respuesta), tenga en cuenta que también deberá especificar el recurrencia máxima si pretende tratar con rangos mayores a 3 meses. El valor predeterminado es 100. Esto significa que, tal como está escrita actualmente la consulta, solo realizará un máximo de 101 fechas (100 niveles de recursividad).

También puede especificar OPTION (MAXRECURSION 0) al final del último SELECT para superar esto. 0 significa infinitos niveles de recursividad. Pero de nuevo, toma nota de la publicación de Aaron.