Kumar AU

Kumar AU

  • 1.3k
  • 294
  • 55.9k

Generate DELETE Query using ONLY IN operator

Nov 2 2020 4:50 PM
I am trying to write a query that generates the Delete query automatically based on the requirements. I will get data from different tables and dump into temp table and then using this temp table I need to write query using IN operator, please help me
 
This is what I have tried
  1. SET  
  2.   NOCOUNT ON DECLARE @DeleteDisbursement TABLE (  
  3.     DisbursementId BIGINT,  
  4.     PolicyNumber NVARCHAR(10),  
  5.     DisbursementAmount DECIMAL(19, 4)  
  6.   ) DECLARE @DeleteRecords Table(DisbursementId BIGINT, ActivityId BIGINT)  
  7. INSERT INTO  
  8.   @DeleteDisbursement (DisbursementId, PolicyNumber, DisbursementAmount)  
  9. VALUES  
  10.   (4576, '12345', 3.00),  
  11.   (1232, '65455', 143.44),  
  12.   (2341, '34234', 228.95),  
  13.   (1111, '23155', 414.89)  
  14. SELECT  
  15.   *  
  16. from  
  17.   @DeleteDisbursement DECLARE @GenerateScriptCount BIGINT = 0 DECLARE @DisbursementIDValue BIGINT = 0 DECLARE @ActivityIdValue BIGINT = 0 WHILE EXISTS(  
  18.     SELECT  
  19.       Top 1 1  
  20.     FROM  
  21.       @DeleteDisbursement  
  22.   ) BEGIN DECLARE @DisbursementId BIGINT = 0 DECLARE @PolicyNumber NVARCHAR(10) DECLARE @AccountId BIGINT = 0 DECLARE @ActivityId BIGINT DECLARE @DisbursementAmount DECIMAL(19, 4)  
  23. SELECT  
  24.   TOP 1 @DisbursementId = DisbursementId,  
  25.   @PolicyNumber = PolicyNumber,  
  26.   @DisbursementAmount = DisbursementAmount  
  27. FROM  
  28.   @DeleteDisbursement  
  29. SET  
  30.   @ActivityId = (  
  31.     SELECT  
  32.       ActivityId  
  33.     FROM  
  34.       ActivityLog  
  35.     WHERE  
  36.       ActivityAmount = @DisbursementAmount  
  37.   ) IF (@ActivityId > 0) BEGIN  
  38. INSERT INTO  
  39.   @DeleteRecords (DisbursementId, ActivityId)  
  40. VALUES(@DisbursementId, @ActivityId)  
  41. END  
  42. DELETE FROM  
  43.   @DeleteDisbursement  
  44. WHERE  
  45.   DisbursementId = @DisbursementId  
  46. END WHILE EXISTS(  
  47.   SELECT  
  48.     Top 1 1  
  49.   FROM  
  50.     @DeleteRecords  
  51. BEGIN  
  52. SELECT  
  53.   TOP 1 @DisbursementIDValue = @DisbursementId,  
  54.   @ActivityIdValue = @ActivityId  
  55. FROM  
  56.   @DeleteRecords PRINT 'DELETE FROM Disbursement Where DisbursementId IN (' + CONVERT(NVARCHAR(MAX), @DisbursementIDValue) + ')' PRINT 'DELETE FROM ActivityLog WHERE ActivityId IN (' + CONVERT(NVARCHAR(MAX), @ActivityIdValue) + ')'  
  57. DELETE FROM  
  58.   @DeleteRecords  
  59. WHERE  
  60.   DisbursementId = @DisbursementId  
  61. END  
  62. SET  
  63.   NOCOUNT OFF;
But its not working, Please help me How do I write query only 1 query which included in IN Operator like below :-
  1. DELETE FROM  
  2.   Disbursement  
  3. Where  
  4.   DisbursementId IN (4576, 1232, 2341, 1111)  
  5. DELETE FROM  
  6.   ActivityLog  
  7. WHERE  
  8.   ActivityId IN (1000, 2000, 3000, 4000)

Answers (5)