【问题标题】:How to perform insert operation in SQL Server only when row does not exists? [duplicate]仅当行不存在时,如何在 SQL Server 中执行插入操作? [复制]
【发布时间】: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 sql-server


【解决方案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() 与这个问题有任何关系,虽然很难从这个问题中看出。
  • 链接为副本的问题中的解决方案有什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 2018-02-15
  • 1970-01-01
相关资源
最近更新 更多