仅当行不存在时,如何在 SQL Server 中执行插入操作? [复制]
Posted
技术标签:
【中文标题】仅当行不存在时,如何在 SQL Server 中执行插入操作? [复制]【英文标题】:How to perform insert operation in SQL Server only when row does not exists? [duplicate] 【发布时间】:2019-04-16 08:24:57 【问题描述】:Table:# result
Name Issues Years Value
Rani Critical 2018 0.90
Rani Critical 2018 0.00
Expected Output:-
Name Issues Year Value
Rani Critical 2018 0.90
Rani Critical 2018 0.00
Rani Null 2019 0.00
select Name=’Rani’,Issues=' Critical', years, ,Value from #result;
Insert #result (Name,years,Value) values(‘Rani’,year(getdate()),0)
我只想在当前年份(例如:-2019)时对#result 表执行插入操作 是不存在的。 如果 #result 表上存在当前年份,则不应执行插入操作。
【问题讨论】:
SQL Server insert if not exists best practice 的可能重复项。问题是针对 SQL Server,但答案是标准 sql,也适用于此处。 【参考方案1】:您可以使用 IF NOT EXISTS 来执行此操作。
DECLARE @year INT = YEAR(GETDATE())
IF NOT EXISTS(SELECT 1 FROM #result WHERE Year = @year )
BEGIN
Insert #result (Name,years,Value) values(‘Rani’,@year,0)
END
【讨论】:
这在默认隔离级别下不是线程安全的(如果不在事务中,则在任何隔离级别) @MartinSmith,如果我们使用临时表,有什么问题吗?你能告诉我,需要修复什么。 好点,因为它是一个本地范围的临时表,这很好。没有其他会话可以向其插入行 我不认为GETDATE()
与这个问题有任何关系,虽然很难从这个问题中看出。
链接为副本的问题中的解决方案有什么问题?以上是关于仅当行不存在时,如何在 SQL Server 中执行插入操作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
仅当行不存在时,如何将一行添加到不同子目录下的多个文本文件?
当行不存在时,“SELECT FOR UPDATE”是不是会阻止其他连接插入?