Поделиться через


Изменение данных при помощи предложения SET

В предложении SET указываются столбцы, которые должны быть изменены, и новые значения для этих столбцов. Значения в указанных столбцах обновляются значениями, переданными в предложении SET, во всех строках, удовлетворяющих условию поиска предложения WHERE.

В следующем примере изменяется значение почтового индекса для всех строк, соответствующих указанному городу.

USE AdventureWorks;
GO
UPDATE Person.Address
SET PostalCode = '98000'
WHERE City = 'Bothell';
GO

Если предложение WHERE отсутствует, обновляются все строки. Например, эта инструкция обновляет значения в столбцах Bonus, CommissionPct и SalesQuota для всех строк таблицы SalesPerson.

USE AdventureWorks;
GO
UPDATE Sales.SalesPerson
SET Bonus = 6000, CommissionPct = .10, SalesQuota = NULL;
GO

Значения вычисляемых столбцов могут быть рассчитаны и использованы в операции обновления. В следующем примере удваивается значение столбца ListPrice для всех строк в таблице Product.

USE AdventureWorks ;
GO
UPDATE Production.Product
SET ListPrice = ListPrice * 2;
GO

Выражения, используемые в предложении SET, также могут быть вложенными запросами, возвращающими только одно значение. В следующем примере изменяется столбец SalesYTD в таблице SalesPerson для отображения самых последних сведений о продажах, зафиксированных в таблице SalesOrderHeader. Вложенные запросы собирают сведения о продажах для всех менеджеров по продажам, указанных в инструкции UPDATE.

USE AdventureWorks;
GO
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + 
    (SELECT SUM(so.SubTotal) 
     FROM Sales.SalesOrderHeader AS so
     WHERE so.OrderDate = (SELECT MAX(OrderDate)
                           FROM Sales.SalesOrderHeader AS so2
                           WHERE so2.SalesPersonID = 
                                 so.SalesPersonID)
     AND Sales.SalesPerson.SalesPersonID = so.SalesPersonID
     GROUP BY so.SalesPersonID);
GO