Sql 使用'输入一条记录;如果不存在';
我试图在会议表中找到一条记录,该记录包含与正在保存的记录相同的修改的用户id、分配的用户id、名称、开始日期、结束日期。只有在会议表中没有新记录时,才应添加新记录 运行此操作时,即使表中已经有匹配的记录,也会添加记录 我错过了什么 谢谢你的帮助Sql 使用'输入一条记录;如果不存在';,sql,not-exists,Sql,Not Exists,我试图在会议表中找到一条记录,该记录包含与正在保存的记录相同的修改的用户id、分配的用户id、名称、开始日期、结束日期。只有在会议表中没有新记录时,才应添加新记录 运行此操作时,即使表中已经有匹配的记录,也会添加记录 我错过了什么 谢谢你的帮助 ALTER PROCEDURE Add_Follow_up_From_Lead @MODIFIED_USER_ID AS VARCHAR (250) = MODIFIED_USER_ID , @ASSIGNED_USER_ID AS VARCHAR (
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
您的IF条件没有检查与新行具有相同值的行。如果这些值中的任何一个出现在表中的任何位置,它将返回true。您最好在Meetings表上创建一个唯一的键(修改的用户id、分配的用户id、名称、日期开始、日期结束、创建人),如果它满足您可能有的任何其他约束条件。然后,您可以只运行一个简单的insert查询,如下所示
INSERT IF NOT EXISTS INTO Meetings VALUES(.....)
对于SQL Server
让此错误发生比先检查更容易、更安全。当在应存在的名称、开始日期、结束日期、创建人上存在唯一约束/索引时,会发生此错误
开始尝试
插入等
结束尝试
开始捕捉
如果出现错误_编号()2627
错误等
端接
为什么传入变量而不使用它们?哪个数据库引擎?MySQL?SQL Server?gbn:我猜是它的SQL Server。MySQL是否使用@
?我了解到不能使用多个值的IF条件。谢谢
If not exists(select name from meetings where(name=@name)and(date_start=@date_start)and....etc)
Begin
Insert into meetings(...)values(....)
End
BEGIN TRY
INSERT etc
END TRY
BEGIN CATCH
IF ERROR_NUMBER() <> 2627
RAISERROR etc
END CATCH