サーチ…


構文

  • UPDATE テーブル
    SET column_name = valuecolumn_name2 = value_2 、...、 column_name_n = value_n
    WHERE 条件論理演算子 condition_n)

すべての行の更新

この例では、サンプルデータベースのCars Tableを使用しています。

UPDATE Cars
SET Status = 'READY'

このステートメントは、 'Cars'表のすべての行の 'status'列に、行セットをフィルタリングするWHERE句がないため、「READY」に設定されます。

指定された行の更新

この例では、サンプルデータベースのCars Tableを使用しています。

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

このステートメントは、ID 4の「Cars」の行のステータスを「READY」に設定します。

WHERE句には、各行に対して評価される論理式が含まれます。行が基準を満たす場合、その値が更新されます。それ以外の場合は、行は変更されません。

既存の値の変更

この例では、サンプルデータベースのCars Tableを使用しています。

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

更新操作には、更新された行の現在の値を含めることができます。この単純な例では、 TotalCostは2行で100ずつ増えます。

  • #3のトータルコストが100から200に増加しました
  • #4のトータルコストは1254から1354に増加しました

列の新しい値は、以前の値から、または同じ表または結合された表内の他の列の値から派生することがあります。

別のテーブルからのデータでUPDATEする

以下の例は、 Customerでもあり、 Employees表に電話番号が設定されていない従業員のPhoneNumberを記入しています。

これらの例では、サンプルデータベースのEmployeesテーブルと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サーバー

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