Как выполнить операцию вставки в SQL Server, только если строки не существует?

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)  

Я хочу выполнить операцию вставки в таблицу #result только в том случае, если текущий год (например: -2019) Не существует. Если текущий год существует в таблице #result, операция вставки таблицы не должна выполняться.

Возможный дубликат Вставка SQL Server, если не существует лучшей практики. Вопрос для SQL Server, но ответ стандартный sql и применим и здесь.

Joakim Danielson 16.04.2019 10:29
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

это не потокобезопасно на уровне изоляции по умолчанию (и на любом уровне изоляции, если не в транзакции)

Martin Smith 16.04.2019 10:33

@MartinSmith, если мы используем временную таблицу, есть ли какие-то проблемы. Подскажите пожалуйста, что нужно исправить.

Venkataraman R 16.04.2019 10:36

Хороший вопрос, так как это временная таблица с локальной областью видимости, это нормально. Никакой другой сеанс не может вставлять в него строки

Martin Smith 16.04.2019 10:36

Я не думаю, что GETDATE() имеет какое-либо отношение к этому вопросу, хотя по вопросу трудно сказать.

Nick.McDermaid 16.04.2019 10:37

Что не так с решением в вопросе, связанном как дубликат?

Joakim Danielson 16.04.2019 10:38

@МартинСмит, спасибо. да. мы использовали временную таблицу в транзакциях без проблем, так как она привязана к сеансу.

Venkataraman R 16.04.2019 10:39

Другие вопросы по теме