Come ha menzionato Alex K, dovresti scriverlo come una funzione con valori di tabella inline. Ecco l'articolo che lo descrive.
In breve, la sintassi sarebbe qualcosa di simile a
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
Puoi avere una query selezionata (per quanto complessa, puoi utilizzare CTE). E poi lo userai come
SELECT * FROM dbo.GetForPeriod('1-Jan-2010', '31-Jan-2010')