A variation using CROSS APPLY
;WITH cteTally (N) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0))
FROM master..syscolumns
)
SELECT P.ID, P.Descr, Z.HolDate, 1 AS Days
FROM PublicHols AS P
CROSS APPLY
(
SELECT DATEADD(DAY, N, StartDate) - 1
FROM cteTally
WHERE N < DATEDIFF(DAY, StartDate, EndDate) + 2
) AS Z (HolDate)
ORDER BY HolDate