Yes - you can use a Numbers Table a bit like this (probably not overly efficient, and assumes incident dates have zero time parts (00:00:00) - if this is not true you'll need to make the time zero test the difference in dates):
CREATE PROC dbo.GetRange @startdate datetime, @enddate datetime
AS BEGIN
-- Setting up a numbers table...
WITH Nbrs_3( n ) AS ( SELECT 1 UNION SELECT 0 ),
Nbrs_2( n ) AS ( SELECT 1 FROM Nbrs_3 n1 CROSS JOIN Nbrs_3 n2 ),
Nbrs_1( n ) AS ( SELECT 1 FROM Nbrs_2 n1 CROSS JOIN Nbrs_2 n2 ),
Nbrs_0( n ) AS ( SELECT 1 FROM Nbrs_1 n1 CROSS JOIN Nbrs_1 n2 ),
Nbrs ( n ) AS ( SELECT 1 FROM Nbrs_0 n1 CROSS JOIN Nbrs_0 n2 ),
N AS (SELECT n = ROW_NUMBER() OVER (ORDER BY n) FROM Nbrs ),
-- Getting the full date range
DateRange AS ( SELECT thedate = DATEADD(day,N.n-1,@startdate)
FROM N
WHERE N.n <= DATEDIFF(day,@startdate,@enddate)+1 )
SELECT D.thedate
, numincidents = (SELECT count(*)
FROM TBL_INCIDENTS I
WHERE I.incdate = D.thedate)
FROM DateRange D
GROUP BY D.thedate
END
GO
Then use as..
exec GetRange @startdate = {d '2009-02-01'}, @enddate = {d '2009-03-31'}