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
