Wie Alex K erwähnt hat, sollten Sie es als Inline-Tabellenwertfunktion schreiben. Hier ist der Artikel das beschreibt es.
Kurz gesagt, die Syntax wäre so etwas wie
CREATE FUNCTION dbo.GetForPeriod
( @StartDate datetime, @EndDate datetime)
RETURNS TABLE
RETURN
SELECT [[ your column list ]]
FROM [[ table list]
WHERE [[some column] BETWEEN @StartDate AND @EndDate
Sie können eine Auswahlabfrage haben (so komplex sie auch sein mag, sie kann CTE verwenden). Und dann verwenden Sie es als
SELECT * FROM dbo.GetForPeriod('1-Jan-2010', '31-Jan-2010')