if I have a list of IDs (1,4,6,7) and a db table where I want to delete all records where ID is in this list, what is the way to do that?

3 Answers

Your question almost spells the SQL for this:

DELETE FROM table WHERE id IN (1, 4, 6, 7) 
6
delete from t where id in (1, 4, 6, 7) 
 CREATE FUNCTION dbo.func_SplitString ( @Input NVARCHAR(MAX), @Character CHAR(1) ) RETURNS @Output TABLE ( Item NVARCHAR(1000) ) AS BEGIN DECLARE @StartIndex INT, @EndIndex INT; SET @StartIndex = 1; --ADD THE SEPERATING CHARACTER AT THE END OF THE STRING FOR LOOP PURPOSE IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character BEGIN SET @Input = @Input + @Character; END -- LOOP AS LONG AS THE SEPARATOR EXISTS IN THE STRING WHILE CHARINDEX(@Character, @Input) > 0 BEGIN -- GET INDEX OF THE SEPARATOR (THIS INDICATES AN ITEM WE CAN TAKE OFF THE STRING) SET @EndIndex = CHARINDEX(@Character, @Input); -- INSERT ITEM INTO TEMP TABLE INSERT INTO @Output(Item) SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1); -- REMOVE ITEM FROM ORIGINAL STRING ALONG WITH THE SEPARATOR WE HAVE JUST WORKED WITH -- THIS REMOVES THE ITEM AFTER ADDING IT TO THE TEMP TABLE ALONG WITH THE SEPARATOR FOR THE ITEM -- UNTIL THERE IS NO SEPARATOR ANYMORE IN THE ORIGINAL STRING SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input)); END RETURN END GO 

========= MAKE USE OF FUNCTION TO DO A DELETE OPERATION THIS WAY ==========

 DECLARE @ListOfIDs varchar(100); SET @ListOfIDs = '100,200,300,400,500'; DELETE FROM [dbo].[tableContainingDataToDelete] WHERE ID IN(SELECT CAST(Item AS int) FROM dbo.func_SplitString(@ListOfIDs , ',')); 

========= HOPE THIS HELPS (smiles) ========

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy