Comment returnner des données vides même s'il n'y en a pas pour une plage spécifique?

Je voudrais returnner des données d'une table pour une plage de dates spécifique. Pour cela, j'ai une procédure stockée qui accepte les parameters @fromDate et @toDate .

Le sql ressemble à ceci:

 DECLARE @fromDate DATETIME, @toDate DATETIME SET @fromDate = '2017-04-01' SET @toDate = '2017-04-07' SELECT MD.ID, MD.Name, RT.Result, RT.DateOn FROM MainData MD LEFT JOIN ResultsTable RT RT.MainDataID = MD.ID WHERE RT.DateOn >= @fromDate AND RT.DateOn <= @toDate 

Cela fonctionne comme prévu et renvoie les résultats dans cette plage, mais mon problème est que je veux returnner des résultats vides même s'il n'y a aucun résultat dans le ResultsTable . Fondamentalement, si je request des résultats pour une période de 7 jours, je devrais get 7 résultats, où certains ou tous pourraient être inexistants.

J'ai essayé de créer une table fictive avec les dates dans cette gamme, mais je ne suis pas sûr de savoir comment le joindre avec l'autre sql:

 INSERT INTO #tempDates SELECT DATEADD(DAY, nbr - 1, @fromDate) FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS Nbr FROM sys.columns c ) nbrs WHERE nbr - 1 <= DATEDIFF(DAY, @fromDate, @toDate) 

Toute aide est la bienvenue

Déplacez les conditions de date de la clause WHERE vers la clause ON :

 SELECT MD.ID, MD.Name, RT.Result, RT.DateOn FROM MainData MD LEFT JOIN ResultsTable RT ON RT.MainDataID = MD.ID AND RT.DateOn BETWEEN @fromDate AND @toDate