开发者

Enter one record using 'if Not Exists'

开发者 https://www.devze.com 2023-04-03 22:33 出处:网络
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. Th开发者_JS百科e

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. Th开发者_JS百科e 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


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(.....)


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?

0

精彩评论

暂无评论...
验证码 换一张
取 消