Sql server 使用SQL Server 2016合并函数

Sql server 使用SQL Server 2016合并函数,sql-server,merge,insert,Sql Server,Merge,Insert,我有一个数字日历事件表,它包含以下列:dce\U日期、dce\U事件名称、dce\U事件图标 数据显示在可编辑的数据网格中,可以在其中修改事件名称或图标。我不知道它是更新还是插入我不想使用Id,这里的日期是唯一的主键 我听说Merge函数可以检查值是否存在,这里我的主键是dce_date 另外,我需要检测用户是否已删除数据网格中的值dce_event_name或dce_event_icone 我想使用合并功能,但我只有一个表,在合并中,似乎我需要一个源表 编辑:我使用了IF-EXIST语句,但在

我有一个数字日历事件表,它包含以下列:dce\U日期、dce\U事件名称、dce\U事件图标

数据显示在可编辑的数据网格中,可以在其中修改事件名称或图标。我不知道它是更新还是插入我不想使用Id,这里的日期是唯一的主键 我听说Merge函数可以检查值是否存在,这里我的主键是dce_date

另外,我需要检测用户是否已删除数据网格中的值dce_event_name或dce_event_icone

我想使用合并功能,但我只有一个表,在合并中,似乎我需要一个源表

编辑:我使用了IF-EXIST语句,但在ELSE部分,似乎我不能在IF-EXIST语句中加上CASE

IF EXISTS (SELECT dce_date FROM digital_calendar_event where dce_date = @CurrentDate)
UPDATE digital_calendar_event set dce_event_name = @EventName, dce_event_icone = @EventIcone
--- incorrect syntax near 'CASE'
ELSE CASE 
   WHEN @EventName ='' and @EventIcone = '' THEN DELETE FROM digital_calendar_event WHERE dce_date = @CurrentDate
   WHEN @EventName <> '' or @EventIcone <> '' THEN INSERT INTO digital_calendar_event (dce_date, dce_event_name, dce_event_icone) VALUES(@CurrentDate, @EventName , @EventIcone)
END

如何做到这一点?我编写的SQL代码正是我需要的,但如果不起作用…

嗨,请尝试下面的查询-

IF EXISTS (SELECT dce_date FROM digital_calendar_event where dce_date = @CurrentDate)
Begin
UPDATE digital_calendar_event set dce_event_name = @EventName, dce_event_icone = @EventIcone

ELSE 

if  @EventName ='' and @EventIcone = '' 
Begin
DELETE FROM digital_calendar_event WHERE dce_date = @CurrentDate

ENd


   Else IF @EventName <> '' or @EventIcone <> '' 
   Begin
   INSERT INTO digital_calendar_event (dce_date, dce_event_name, dce_event_icone) VALUES(@CurrentDate, @EventName , @EventIcone)

   END
END

你好,请尝试下面的查询-

IF EXISTS (SELECT dce_date FROM digital_calendar_event where dce_date = @CurrentDate)
Begin
UPDATE digital_calendar_event set dce_event_name = @EventName, dce_event_icone = @EventIcone

ELSE 

if  @EventName ='' and @EventIcone = '' 
Begin
DELETE FROM digital_calendar_event WHERE dce_date = @CurrentDate

ENd


   Else IF @EventName <> '' or @EventIcone <> '' 
   Begin
   INSERT INTO digital_calendar_event (dce_date, dce_event_name, dce_event_icone) VALUES(@CurrentDate, @EventName , @EventIcone)

   END
END

感谢@Deepak Kumar,以下是答案:

IF EXISTS (SELECT dce_date FROM digital_calendar_event where dce_date = @CurrentDate)
BEGIN
    IF  @EventName ='' and @EventIcone = '' 
        BEGIN
        DELETE FROM digital_calendar_event WHERE dce_date = @CurrentDate
        END
   ELSE UPDATE digital_calendar_event set dce_event_name = @EventName, dce_event_icone = @EventIcone
END
ELSE-- else of if exists
  BEGIN
    IF @EventName <> '' or @EventIcone <> '' 
    INSERT INTO digital_calendar_event (dce_date, dce_event_name, dce_event_icone) VALUES(@CurrentDate, @EventName , @EventIcone)
  END

感谢@Deepak Kumar,以下是答案:

IF EXISTS (SELECT dce_date FROM digital_calendar_event where dce_date = @CurrentDate)
BEGIN
    IF  @EventName ='' and @EventIcone = '' 
        BEGIN
        DELETE FROM digital_calendar_event WHERE dce_date = @CurrentDate
        END
   ELSE UPDATE digital_calendar_event set dce_event_name = @EventName, dce_event_icone = @EventIcone
END
ELSE-- else of if exists
  BEGIN
    IF @EventName <> '' or @EventIcone <> '' 
    INSERT INTO digital_calendar_event (dce_date, dce_event_name, dce_event_icone) VALUES(@CurrentDate, @EventName , @EventIcone)
  END

您可以从一个键列中进行标识。merge如何知道行被更新、插入或删除。@DeepakKumar“我的一个主键列”是唯一的,就像Id一样,但在这里它是一个日期,您可以从一个主键列中进行标识。merge将如何知道行被更新、插入或删除。@DeepakKumar我的一个主键列是唯一的,就像Id一样,但这里是DateThank!这并不完全正确,但我帮了我很多,我贴出的答案感谢你:谢谢!这并不完全正确,但我帮了我很多,我发布了答案,感谢你: