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 中显示状态