Just use that table-valued parameter like table – proper set-based approach, no messy while or for loop needed:
ALTER PROCEDURE [dbo].[spCreateTaskInstances]
@TaskId INT,
@CreatedByUserId INT,
@DueDates dbo.DateList READONLY
AS
BEGIN
SET NOCOUNT ON
INSERT INTO dbo.taskinstance (TaskId, CreatedById, DueDate, RowGuid, CreatedDate)
SELECT
@TaskId, @CreatedByUserId, CAST(d.item AS DATE), NEWID(), GETUTCDATE()
FROM
@DueDates d
END
CLICK HERE to find out more related problems solutions.