T-SQLpowered

WHILE

Iterate with MIN/MAX Id. Doesn’t perform well for broken number sequences.

DECLARE @Current_Id INT
DECLARE @Max_Id INT
DECLARE @Ids TABLE ( [Id] INT)

INSERT INTO @Ids ([Id])
	SELECT [Id]
	FROM (VALUES (1),(2),(3)) [v] ([Id])

SELECT @Current_Id = MIN([Id]) FROM @Ids
SELECT @Max_Id = MAX([Id]) FROM @Ids

WHILE @Current_Id <= @Max_Id
BEGIN

    SELECT 
		@Current_Id = [Id]
    FROM @Ids
    WHERE [Id] = @Current_Id

    PRINT @Current_Id

    SET @Current_Id = @Current_Id + 1

END
GO

Iterate as long as there is a row to be processed. May have performance impact for large set of ids.

DECLARE @Id INT
DECLARE @Ids TABLE ( [Id] INT)

INSERT INTO @Ids ([Id])
	SELECT 
        [Id]
	FROM (VALUES (1),(2),(3)) [v] ([Id])

WHILE EXISTS (SELECT * FROM @Ids)
BEGIN
    
    SELECT TOP(1)
		@Id = [Id]
    FROM @Ids
    ORDER BY Id

    RAISERROR('%i', 10, 1, @Id) WITH NOWAIT

    DELETE FROM @Ids WHERE Id = @Id

END
GO