Поиск…


Синтаксис

  • Таблица UPDATE
    SET column_name = значение , column_name2 = значение_2 , ..., column_name_n = значение_n
    Условие WHERE ( логическое условие operator_n )

Обновление всех строк

В этом примере таблица Cars используется в примерах баз данных.

UPDATE Cars
SET Status = 'READY'

Этот оператор установит столбец «status» всех строк таблицы «Cars» в «READY», потому что у него нет WHERE для фильтрации набора строк.

Обновление заданных строк

В этом примере таблица Cars используется в примерах баз данных.

UPDATE 
    Cars
SET 
    Status = 'READY'
WHERE 
    Id = 4

Это утверждение установит статус строки «Автомобили» с id 4 на «READY».

Предложение WHERE содержит логическое выражение, которое оценивается для каждой строки. Если строка соответствует критериям, ее значение обновляется. В противном случае строка остается неизменной.

Изменение существующих значений

В этом примере таблица Cars используется в примерах баз данных.

UPDATE Cars
SET TotalCost = TotalCost + 100
WHERE Id = 3 or Id = 4

Операции обновления могут включать текущие значения в обновленной строке. В этом простом примере TotalCost увеличивается на 100 для двух строк:

  • Общая стоимость автомобиля №3 увеличена с 100 до 200
  • Общая стоимость автомобиля №4 увеличена с 1254 до 1354

Новое значение столбца может быть получено из его предыдущего значения или любого значения другого столбца в той же таблице или объединенной таблице.

UPDATE с данными из другой таблицы

Приведенные ниже примеры заполняют PhoneNumber для любого Сотрудника, который также является Customer и в настоящее время не имеет номера телефона, установленного в таблице Employees .

(В этих примерах используются таблицы Employees and Customers из примеров баз данных.)

Стандартный SQL

Обновление с использованием коррелированного подзапроса:

UPDATE 
    Employees
SET PhoneNumber =
    (SELECT 
         c.PhoneNumber
     FROM 
         Customers c
     WHERE 
         c.FName = Employees.FName 
         AND c.LName = Employees.LName)
WHERE Employees.PhoneNumber IS NULL

SQL: 2003

Обновление с помощью MERGE :

MERGE INTO 
    Employees e
USING 
    Customers c 
ON 
    e.FName = c.Fname 
    AND e.LName = c.LName
    AND e.PhoneNumber IS NULL
WHEN MATCHED THEN
   UPDATE 
      SET PhoneNumber = c.PhoneNumber

SQL Server

Обновление с помощью INNER JOIN :

UPDATE 
    Employees
SET 
    PhoneNumber = c.PhoneNumber
FROM 
    Employees e
INNER JOIN Customers c
        ON e.FName = c.FName 
        AND e.LName = c.LName
WHERE 
    PhoneNumber IS NULL

Захват обновленных записей

Иногда хочется записать только что обновленные записи.

CREATE TABLE #TempUpdated(ID INT)

Update TableName SET Col1 = 42
    OUTPUT inserted.ID INTO #TempUpdated
    WHERE Id > 50


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow