Here's an example of some of the techniques you could use. Of course, they might not be exactly, or even remotely close to what you need. 
DROP PROCEDURE weirddatestuffGOCREATE PROCEDURE weirddatestuff--SET DATEFORMAT YMD EXEC weirddatestuff '2001/04/01','2001/01/01',15@startdate DATETIME,@datefrom DATETIME,@months INTASSET DATEFORMAT YMDSELECT @startdate = CAST(DATEPART(YY,@startdate) AS VARCHAR(4)) + '/' + CAST(DATEPART(MM,@startdate) AS VARCHAR(2)) + '/01'--Create the table to hold all this crap.CREATE TABLE #weirddatepopulation( IhatecolumnscalledID INT IDENTITY(1,1), PackID VARCHAR(4), --Why is this varchar(4)? It should be an INT. DateFrom DATETIME, DateTo DATETIME)--Hold your PackID series.DECLARE @packer TABLE(PackID INT) --Love these names.INSERT @packer(PackID) SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4--Populate a date table with the appropriate dates.DECLARE @datestuff TABLE(datestuffed DATETIME)DECLARE @min INT, @startdatemid DATETIME, @startdateend DATETIME, @minplusone INTSELECT @min = 0WHILE @min < @monthsBEGIN SELECT @minplusone = @min + 1 SELECT @startdatemid = DATEADD(DD,14,DATEADD(MM,@min,@startdate)), @startdateend = DATEADD(DD,-1,DATEADD(MM,@minplusone,@startdate)) INSERT @datestuff(datestuffed) SELECT @startdatemid UNION ALL SELECT @startdateendSELECT @min = @min + 1ENDINSERT #weirddatepopulation( PackID, DateFrom, DateTo) SELECT p.PackID, @datefrom, ds.datestuffed FROM @datestuff ds CROSS JOIN @packer p ORDER BY ds.datestuffed, p.PackIDSELECT IhatecolumnscalledID, PackID, DateFrom, DateToFROM #weirddatepopulationGO
MeanOldDBAderrickleggett@hotmail.comWhen life gives you a lemon, fire the DBA.