SQL - 如果不存在

Posted

技术标签:

【中文标题】SQL - 如果不存在【英文标题】:SQL - If not exists 【发布时间】: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.. 【参考方案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。 :-)

以上是关于SQL - 如果不存在的主要内容,如果未能解决你的问题,请参考以下文章

SQL-如果指定值存在返回1,如果不存在返回0的SQL语句

如果不存在 SQL 语句

比较两个表,如果存在则显示另一个表的值,如果不存在,则在 SQL 中显示状态

sql - 如果不存在则插入

t-sql 如果记录存在则选择一列,如果不存在则选择不同的列

sql:判断是不是存在相同记录,如果存在则改写,不存在则添加