Обновление данных в SQL Server через SELECT запрос

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В процессе обновления строк одной таблицы при содействии данных из другой таблицы, стоит использовать INNER JOIN:

SQL
Скопировать код
UPDATE t1
SET t1.col = t2.col
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.id = t2.id;

Можно рассматривать такой метод как повышенный SELECT. Все ваши обновления в Table1 из Table2 выполняются быстро и точно. Кажется, всё очень просто? Но далеко не так!

Кинга Идем в IT: пошаговый план для смены профессии

Гром! Синхронизация с использованием MERGE

Если вам нужно синхронизировать две таблицы, лучшим помощником станет MERGE. It's like a superhero, это как супергерой, выполняющий операции INSERT, UPDATE и DELETE. Всё и сразу!

SQL
Скопировать код
MERGE INTO Table1 t1
USING Table2 t2
ON t1.id = t2.id
WHEN MATCHED THEN 
    UPDATE SET t1.col = t2.col;

Ваши действия в MERGE могут быть разнообразными, например, можно использовать фильтрацию данных и объединение операций в блоке USING.

Коррелированные подзапросы — способ к технически совершенным обновлениям

Давайте окунемся в мир коррелированных подзапросов — это как дельфины в море SQL 🐬! Устанавливаем цели и избегаем ошибок:

SQL
Скопировать код
UPDATE Table1
SET col = (SELECT col FROM Table2 WHERE Table2.id = Table1.id AND Table2.col IS NOT NULL)
WHERE EXISTS (
    SELECT 1 FROM Table2 WHERE Table2.id = Table1.id AND Table2.col IS NOT NULL
);

Вуаля! 🎩 Наблюдайте, как исчезают все значения NULL!

Транзакции для поддержания атомарности

Оформите своё обновление в виде транзакции. Этакий уютный плед, под которым ваши обновления остаются тёплыми. Так они будут оставаться последовательными и защищёнными даже при одновременных запросах пользователей к базе данных:

SQL
Скопировать код
BEGIN TRANSACTION;

UPDATE t1
SET t1.col1 = t2.col1, t1.col2 = t2.col2
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.id = t2.id
WHERE t1.status = 'active';

COMMIT TRANSACTION;

Транзакция – ключ к атомарной безопасности обновлений в SQL!

Визуализация

Представьте себе художественную галерею, в которой каждое произведение хочет "обновить" свой облик с помощью новой рамы:

SQL
Скопировать код
UPDATE Gallery SET FrameColor = S.FrameColor
FROM Paintings AS P
INNER JOIN SelectedFrames AS S ON P.ID = S.PaintingID
WHERE P.InExhibition = 1;

Сейчас, в роли картин, выступают строки, подлежащие обновлению. Что касается рамок, они представляют из себя свежие данные:

Markdown
Скопировать код
🖼️🖼️🖼️ (Угасшие картины без рам)
      +
🖼️🎨🖼️ (Стильные рамы, готовые пригодиться)
      =
🖼️🖼️🖼️ (Яркие картины в новых рамах)

Мы сопоставляем подходящую раму каждой картине, используя уникальный ID! 🆔 Это какой-то недельный показ моды для картин.

Искусство контроля над общим и частным

Никто не любит полуработы! Проверьте ваше условие WHERE. Лишний индекс? Слишком активные триггеры? Всё должно быть под строгим контролем.

Обновление нескольких колонок

Для обновления нескольких колонок, нужно прямолинейно заявить об этом!

SQL
Скопировать код
UPDATE Table1
SET col1 = Table2.col1, 
    col2 = Table2.col2
FROM Table1
INNER JOIN Table2 ON Table1.id = Table2.id;

Быстро и ясно – это прекрасный бурный поток данных обновляющий всю вашу базу.

WHERE условие: точность обновления

Изменение с помощью SQL и условия WHERE может быть чрезвычайно точечным, как хирургическое вмешательство, подайте скальпель, пожалуйста!

SQL
Скопировать код
UPDATE Table1 AS t1
SET t1.col = t2.col
FROM Table2 AS t2
WHERE t1.id = t2.id AND t1.col <> t2.col;

Всё готово! Операция завершена. Были обновлены только строки с различающимися значениями.

Полезные материалы

  1. How do I UPDATE from a SELECT in SQL Server? – Stack Overflow — Отличная отправная точка для понимания UPDATE в SQL Server.
  2. UPDATE (Transact-SQL) – SQL Server | Microsoft LearnСамые подробные данные от Microsoft по операции UPDATE.
  3. Advanced JSON Techniques in SQL Server – Part 3 — Беседы о JSON, но эта жемчужина для любителей SQL Server.