SQL для визначення того, чи один шматок даних виконується ключем в оновленні або вставити
У такому процесі, як Оновлення, якщо є ключ або Вставити, якщо немає ключа, вибір зазвичай виконується на основі ключа, і процес визначається перевіркою, чи є один випадок. SQL Server 2008 також додає оператор "злиття", який дозволяє виконувати оновлення та вставити (а потім видалити) з одним оператором. Однак це порівняння двох таблиць і не підходить для окремих даних.
Насправді, є спосіб легко оновити рядок, визначивши Оновлення та Вставлення без необхідності перевіряти кількість записів за допомогою оператора select.
update [TableName]
set [ColumnName] = @value
-- : 他更新 SQL
where [KeyColumnName] = @value
-- : 他キー比較
if @@ROWCOUNT = 0
insert into [TableName]
(
[ColumnName]
-- : 他更新 SQL
)
values
(
@value
-- : 他更新値
)
Ключове слово тут - "@@ROWCOUNT". На @@ROWCOUNT можна отримати кількість рядків, до яких було застосовано попередній SQL. Попередній код спочатку виконує оператор Update, і якщо він був оновлений, @@ROWCOUNT повертає 1 або більше, тому він не виконує наступний оператор Insert. І навпаки, якщо жоден рядок не оновлюється в операторі Оновлення, @@ROWCOUNT повертає 0, тому виконайте рішення вставити за оператором IF.
Оскільки наведений вище SQL є шаблоном, замініть імена стовпців і значення, які будуть оновлені у відповідний час. @value це просто ім'я змінної, тому замініть це значенням, яке потрібно оновити.