Imagine you have a user interface with a list of products. On the side of each product you have a delete checkbox and then a delete button below the list. Even though a user can delete multiple products at once, you only want to query the database once. One way to achieve this is by sending a comma separated string with product id’s to a stored procedure. The stored procedure will then loop through the string, grab each id and delete the corresponding row in the product table.

Here’s a stored procedure which does this:

CREATE PROCEDURE DeleteProducts
(
	@values varchar(8000)
)
AS
BEGIN
	SET NOCOUNT ON;

	declare @value int
	declare @pos1 int
	declare @pos2 int

	-- Append , at the end of string.
	if substring(@values, len(@values), 1) <> ','
	begin
		set @values = @values + ','
	end

	-- First position.
	set @pos1 = 1
	set @pos2 = charindex(',', @values, 1)

	while (@pos1 > 0 and @pos2 > 0)
	begin
		set @value = cast(substring(@values, @pos1, @pos2 - @pos1) as int)

		delete from Product
		where ProductId = @value;

		-- Next position.
		set @pos1 = charindex(',', @values, @pos1) + 1
		set @pos2 = charindex(',', @values, @pos1)
	end
END

And this is how you would execute it:

exec DeleteProducts '1,20,30,100,250,1000';