【问题标题】:Using SQL Server 2016 Merge function使用 SQL Server 2016 合并功能
【发布时间】:2018-12-24 20:22:21
【问题描述】:

我有一个表 digital_calendar_event 列:dce_datedce_event_namedce_event_icone

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

另外我需要检测用户是否删除了数据网格中的值(dce_event_namedce_event_icone

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

编辑:我使用了 IF EXIST 语句,但在 ELSE 部分,我似乎无法放置 CASE WHEN 语句

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 代码正是我需要的,但如果不起作用...

【问题讨论】:

  • 您可以从一个键列中识别。合并将如何知道行已更新、插入或删除。
  • @DeepakKumar 我的一个主键列是唯一的,就像一个 ID,但这里是一个日期

标签: sql-server merge insert


【解决方案1】:

你好试试下面的查询 -

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

【讨论】:

  • 谢谢!这不完全正确,但我帮了我很多,感谢您,我发布了答案:)
【解决方案2】:

感谢@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

【讨论】:

    猜你喜欢
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    相关资源
    最近更新 更多