Question

I'm trying to find one record in the Meeting table that contains the same Modified_user_id, assigned_user_id, Name, date_start,date_end, created_by as the record that's being saved. The new record should only be added if there isn't already one in the meeting table.

When I run this, the record is added even if there are already matching records in the table.

What am I missing?

Thanks for your help.

ALTER PROCEDURE Add_Follow_up_From_Lead
@MODIFIED_USER_ID AS VARCHAR (250) = MODIFIED_USER_ID ,

@ASSIGNED_USER_ID AS VARCHAR (250) =MODIFIED_USER_ID,
@NAME nvarchar (50) = NAME,
@DATE_START AS VARCHAR (250) = DATE_START,
@DATE_END AS VARCHAR (250) = DATE_END,
@CREATED_BY AS VARCHAR (250) = CREATED_BY 

AS
BEGIN
SET NOCOUNT ON;

IF NOT (EXISTS (select name from meetings where name = @name)
AND 
EXISTS (SELECT DATE_START FROM MEETINGS WHERE DATE_START = @DATE_START)
AND 
EXISTS (SELECT DATE_END FROM MEETINGS WHERE DATE_END = @DATE_END)
AND
EXISTS (SELECT CREATED_BY FROM MEETINGS WHERE CREATED_BY = @CREATED_BY)) 


insert into meetings(MODIFIED_USER_ID,ASSIGNED_USER_ID,NAME,
DATE_START ,DATE_END,CREATED_BY ) 
,TIME_START,STATUS,duration_hours,duration_minutes,REMINDER_TIME)
select top 1 l.modified_USER_ID,l.modified_USER_ID,first_name +' '+Last_name +' 'as     NAME,FOLLOW_UP_DATE_C as Date_start,FOLLOW_UP_DATE_C  as Date_end ,L.created_by
from leads_cstm lc
join leads l on l.id = lc.id_c where FOLLOW_UP_DATE_C >getdate()
order by l.date_modified Desc

END  GO
Was it helpful?

Solution

Your IF condition isn't checking for one row that has the same values as the new row. It will return true if either one of those values is present anywhere in the table. You are better off creating a unique key (Modified_user_id, assigned_user_id, Name, date_start,date_end, created_by) on the Meetings table, if it satisfies any other constraints that you may have. Then you can just run a simple insert query as

INSERT IF NOT EXISTS INTO Meetings VALUES(.....)

OTHER TIPS

If not exists(select name from meetings where(name=@name)and(date_start=@date_start)and....etc)
Begin
  Insert into meetings(...)values(....)
End

For SQL Server

It's easier and safer to let this error than check first. The error occurs when there is a unique constraint/index on NAME, DATE_START, DATE_END, CREATED_BY which there should be

BEGIN TRY
   INSERT etc
END TRY
BEGIN CATCH
    IF ERROR_NUMBER() <> 2627
      RAISERROR etc
END CATCH

Why are you passing in variables and not using them?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top