How to delete all records in a table based on selected record from another table

krishna ramisetty 21 Reputation points
2022-01-26T11:59:26.267+00:00

Hello Everyone,

I have below query to delete record from 'ExamSet'. but based on the 'ExamSet' table 'Setid' column value i need to remove all reacords in 'ExamLog' table. here i need to select old Setids from ExamSet table CreatedDate (older records based on @Day parameter)

I need to delete all records (associated to Setid coming from ExamSet table) from ExamLog table only not from ExamSet table

CREATE PROCEDURE sp_deleteLog(@day Int)  
AS   
BEGIN  
DELETE [dbo].[ExamSet] Where CreatedDate<DATEADD(dd, -@day, GETDATE());  
END  

168731-table1.png
Please help me

Thanks

SQL Server
SQL Server
A family of Microsoft relational database management and analysis systems for e-commerce, line-of-business, and data warehousing solutions.
14,147 questions
Transact-SQL
Transact-SQL
A Microsoft extension to the ANSI SQL language that includes procedural programming, local variables, and various support functions.
4,665 questions
0 comments No comments
{count} votes

Accepted answer
  1. Tom Phillips 17,741 Reputation points
    2022-01-27T13:55:22.073+00:00

    Based on your new requirements

     CREATE PROCEDURE sp_deleteLog(@day Int)
     AS 
     BEGIN
     DELETE FROM [dbo].[ExamLog]
         WHERE Setid IN (SELECT SetId FROM  [dbo].[ExamSet] Where CreatedDate<DATEADD(dd, -@day, GETDATE()));
     END
    

2 additional answers

Sort by: Most helpful
  1. Tom Phillips 17,741 Reputation points
    2022-01-26T13:31:33.163+00:00
    0 comments No comments

  2. LiHong-MSFT 10,051 Reputation points
    2022-01-27T03:20:37.51+00:00

    Hi @krishna ramisetty
    What you need is 'On Delete Cascade'
    Please check this code and have a test:

    use tempdb  
    go  
      
    create table ExamSet  
    (  
    Setid int primary key ,  
    CreatedDate datetime,    
    SetName varchar(10)  
    )  
    create table Examlog  
    (  
    RowID bigint  primary key,  
    Setid int  ,  
    Created_on datetime  
    )  
    insert into ExamSet values (30,'2019-03-08','A'),(31,'2021-04-02','B'),(32,'2017-08-23','A')  
    insert into Examlog values (199383,30,'2019-03-08'),(199384,30,'2019-03-08'),(199385,30,'2019-03-08'),(199386,30,'2019-03-08')  
    ,(199387,32,'2017-08-23'),(199388,32,'2017-08-23'),(199389,32,'2017-08-23')  
      
    SELECT * from ExamSet;  
    SELECT * from Examlog;  
      
    alter table Examlog  
    add constraint FK_Examlog_Setid_delete  
    foreign key(Setid) references ExamSet(Setid)  
    on delete cascade  
      
    DELETE ExamSet Where CreatedDate<DATEADD(year,-4, GETDATE());  
      
    SELECT * from ExamSet;  
    SELECT * from Examlog;  
    

    Best regards,
    LiHong


    If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
    Note: Please follow the steps in our Documentation to enable e-mail notifications if you want to receive the related email notification for this thread.


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.