【问题标题】:SQL - If not existsSQL - 如果不存在
【发布时间】:2018-06-18 06:36:28
【问题描述】:

我在数据库中有一个表,其中存在一些记录。

当我添加一条新记录时,我需要通过“名称”列检查该记录是否存在于数据库中。如果这样的记录不存在 - 然后添加它,如果存在 - 然后更新。我正在尝试这样:

USE [TestDB]
GO

DECLARE @daily nvarchar = 'DailySummaryEmailProcessor'


IF NOT EXISTS ( SELECT *
                    FROM   [dbo].Crons
                    WHERE   name = @daily) 
            BEGIN                    
                   INSERT INTO [dbo].Crons (CronJobID, Name, Description)
                                    VALUES()                         
            END

ELSE
             BEGIN 
                   UPDATE  [dbo].Crons
                   SET
                   WHERE
             END

【问题讨论】:

  • 你的问题是?保留您正在使用的实际数据库的标签(MySQL 不是 SQL Server)。
  • 这是实现这个的正确方法吗?
  • 您使用的是 MySQL 还是 MS SQL Server?
  • MS SQL Server..

标签: sql sql-server exists


【解决方案1】:

MERGE 应该符合您的要求MERGE (Transact-SQL):

MERGE Crons AS target  
USING (SELECT @Name) AS source (Name)  
ON (target.Name = source.Name)  
WHEN MATCHED THEN 
    UPDATE SET target.Name = source.Name 
WHEN NOT MATCHED
    INSERT INTO Crons (Name) VALUES (source.Name)
OUTPUT $action, deleted.Name, inserted.Name

【讨论】:

    【解决方案2】:

    问题是你从不声明变量@dialy 的大小

    试试这个,看看你会得到什么

    DECLARE @daily nvarchar = 'DailySummaryEmailProcessor'
    SELECT @daily
    

    看起来您需要执行 INSERT .. UPDATE.. 查看 MERGE 语句 https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-2017

    编辑:

    哦..标签中有MySQL。我的答案专门针对SQL Server

    【讨论】:

    • 根据他给出的代码示例,他正在使用SQL Server。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2018-09-17
    • 2014-01-25
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多