Som Alex K har nämnt, bör du skriva det som en inline-tabellvärderad funktion. Här är artikeln som beskriver det.
Kort sagt, syntax skulle vara något liknande
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
Du kan ha en valfråga (hur komplex den än kan använda CTE). Och sedan kommer du att använda det som
SELECT * FROM dbo.GetForPeriod('1-Jan-2010', '31-Jan-2010')