There is nothing hard to do. You should try first.
The skeleton is always the same ;)
CREATE PROCEDURE ProcedureName
@ids VARCHAR(30),
@shift INT
AS
BEGIN
END
I was wondering why do you want to delete records rather than update existing ones... I would suggest you to re-think this part of your project.
Have a look at example:
DECLARE @map TABLE (ID INT, Shift INT)
INSERT INTO @map (ID, Shift)
SELECT 106, 1
UNION ALL SELECT 101, 1
UNION ALL SELECT 200, 1
UNION ALL SELECT 121, 1
UNION ALL SELECT 220, 1
UNION ALL SELECT 122, 1
UNION ALL SELECT 222, 1
UNION ALL SELECT 301, 1
UNION ALL SELECT 203, 1
UNION ALL SELECT 103, 1
UNION ALL SELECT 233, 1
DECLARE @ids VARCHAR(30)
SET @ids = '106,101,200'
DECLARE @tmp TABLE (ID INT)
;WITH IDCollection AS
(
SELECT CONVERT(INT, LEFT(@ids, CHARINDEX(',', @ids)-1)) AS ID, RIGHT(@ids,LEN(@ids) - CHARINDEX(',', @ids)) AS Remainder
WHERE CHARINDEX(',', @ids)>0
UNION ALL
SELECT CONVERT(INT,LEFT(Remainder, CHARINDEX(',', Remainder)-1)) AS ID, RIGHT(Remainder,LEN(Remainder) - CHARINDEX(',', Remainder)) AS Remainder
FROM IDCollection
WHERE CHARINDEX(',', Remainder)>0
UNION ALL
SELECT CONVERT(INT,Remainder) AS ID, NULL AS Remainder
FROM IDCollection
WHERE CHARINDEX(',', Remainder)=0
)
INSERT INTO @tmp (ID)
SELECT ID
FROM IDCollection
DELETE
FROM @map
WHERE ID IN(SELECT ID FROM @tmp)
INSERT INTO @map (ID, Shift)
SELECT ID, 1 AS Shift
FROM @tmp
SELECT *
FROM @map
As i mentioned above, better way is to update existing records instead deleting and adding new ones.
UPDATE @map SET Shift = @Shift
WHERE ID IN (SELECT ID FROM @tmp)