Use a DELETE in batches.
DECLARE @i int = 1
WHILE @i > 0
BEGIN
DELETE TOP (1000000) work.dbo.WRK_FACT
where month >= @I and year = @year
SET @i = @@ROWCOUNT
BEGIN END
Or if you have a trigger on the table that might alter @@ROWCOUNT value.
WHILE EXISTS (
SELECT TOP 1 1
FROM work.dbo.WRK_FACT
where month >= @I and year = @year
)
BEGIN
DELETE TOP (1000000) work.dbo.WRK_FACT
where month >= @I and year = @year
BEGIN END