SQLでテーブルに登録されているデータを変更するときは、UPDATEを使用します。

UPDATEを使うと、社員名を変更したり、商品の価格を修正したり、ステータスをまとめて変更したりできます。

ただし、UPDATEは使い方を間違えると、テーブル内のすべてのデータを書き換えてしまう可能性があります。特に、WHERE句の指定漏れには注意が必要です。

この記事では、SQL Server LocalDBとSQL Server Management Studioを使って、テーブルの作成、サンプルデータの登録、UPDATEによる更新、更新結果の確認までを順番に解説します。

SQLの文法だけを確認するのではなく、実際にクエリを実行しながら進めるため、UPDATEを初めて使う方でも操作の流れを理解できます

UPDATEでは、SET句で変更後の値を指定し、WHERE句で変更するデータを絞り込みます。WHERE句を省略すると、テーブル内のすべての行が更新されるため注意してください。

この記事でわかること

この記事では、SSMSを使って既存データを更新する方法を学びます。

  • UPDATEの基本的な書き方
  • SQL Server LocalDBへ接続する方法
  • 練習用テーブルとサンプルデータの作成方法
  • WHERE句を使って特定のデータだけを更新する方法
  • 複数のカラムをまとめて更新する方法
  • 現在の値を使って数値を更新する方法
  • 誤更新を防ぐための確認方法とトランザクションの使い方

動作環境

この記事では、Windows環境でSQL Server LocalDBとSSMSを使う前提で進めます。

バージョンは一例です。環境によって画面表示や細かい操作が異なる場合があります。

項目内容
OSWindows 11
SQL ServerSQL Server LocalDB
管理ツールSQL Server Management Studio(SSMS)
接続先(LocalDB)\MSSQLLocalDB
使用言語SQL

環境構築ができていない場合は、以下を参考にしてください。
また、C#.NETで実行したい方は本記事と以下の記事を見ながら試行してみてください。

完成イメージ

この記事では、社員情報を管理するEmployeesテーブルを作成し、登録されている氏名、部署、年齢、給与をUPDATEで変更します。

最初に次のデータを登録します。

EmployeeIdEmployeeNameDepartmentAgeSalary
1山田太郎営業部28300000
2佐藤花子開発部32380000
3鈴木一郎営業部40450000
4高橋美咲総務部25280000

UPDATEを実行し、EmployeeIdが1の社員名を変更したり、営業部に所属する社員の給与を一括で増額したりします。

最終的には、更新前に対象データを確認し、安全にUPDATEを実行できる状態を目指します。

UPDATEの実践

ここからは、SSMSを使ってUPDATEを実行します。

手順を上から順番に進めれば、テーブル作成から更新結果の確認まで実行できます

学習用データベースを作成する

まずは、UPDATEを試すための学習用データベースを作成します。

既存のデータベースを触らず、練習用のデータベースを作ると安全です。

SSMSで新しいクエリを開き、以下のSQLを実行します。

CREATE DATABASE SqlPracticeDB;

実行後、左側のデータベース一覧を更新すると、SqlPracticeDBが表示されます。

SqlPracticeDBの作成画像

作成したデータベースを使うために、以下のSQLも実行します。

USE SqlPracticeDB;

これで、以降のSQLはSqlPracticeDBに対して実行されます。

Employeesテーブルを作成する

作成したSqlPracticeDBを使用し、社員情報を保存するEmployeesテーブルを作成します。

このテーブルでは、EmployeeIdを各社員を識別する主キーとして使用します。

CREATE TABLE Employees
(
    EmployeeId INT PRIMARY KEY,
    EmployeeName NVARCHAR(50) NOT NULL,
    Department NVARCHAR(50) NOT NULL,
    Age INT NOT NULL,
    Salary INT NOT NULL
);

各カラムの役割は次のとおりです。

カラム名データ型内容
EmployeeIdINT社員ID
EmployeeNameNVARCHAR(50)社員名
DepartmentNVARCHAR(50)部署名
AgeINT年齢
SalaryINT給与

社員名や部署名には日本語を保存するため、NVARCHAR型を使用しています。

テーブル作成後は、オブジェクトエクスプローラーでSqlPracticeDB内の「テーブル」を更新し、dbo.Employeesが表示されることを確認してください。

テーブル作成画像

サンプルデータを登録する

Employeesテーブルに、UPDATEで変更するためのサンプルデータを登録します。

次のINSERT文では、4人分の社員データをまとめて登録しています。

INSERT INTO Employees
(
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
)
VALUES
    (1, N'山田太郎', N'営業部', 28, 300000),
    (2, N'佐藤花子', N'開発部', 32, 380000),
    (3, N'鈴木一郎', N'営業部', 40, 450000),
    (4, N'高橋美咲', N'総務部', 25, 280000);

SQL ServerでNVARCHAR型に日本語を登録するときは、文字列の前にNを付けています。

実行後に「4行処理されました」などと表示されれば、サンプルデータの登録は完了です。

テーブルデータの登録

表示内容はSSMSの環境によって異なる場合があります。

更新前のデータを確認する

UPDATEを実行する前に、SELECT文で現在のデータを確認します。

更新前の状態を確認しておくことは、誤更新を防ぐ基本操作です。

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
FROM Employees;

実行して、以下のようになっていると問題ありません。

更新前のデータ確認

データが表示されない場合は、使用しているデータベースがSqlPracticeDBになっているか、INSERT文が正常に実行されたかを確認してください。

SSMS上部のデータベース選択欄でも、現在選択されているデータベースを確認できます。

UPDATEの基本構文を確認する

UPDATEは、テーブルに登録されている既存データを変更するSQLです。

基本構文は次のとおりです。

UPDATE テーブル名
SET カラム名 = 更新後の値
WHERE 更新条件;

それぞれの役割は次のとおりです。

役割
UPDATE更新するテーブルを指定する
SET変更するカラムと変更後の値を指定する
WHERE更新対象の行を絞り込む

SET句には更新後の値を指定し、WHERE句には更新対象を判定する条件を指定します。

UPDATEを安全に使ううえで最も重要なのはWHERE句です。Microsoftの公式ドキュメントでも、WHERE句は更新する行を制限する条件として定義されています。

UPDATEを実行する前に、同じWHERE条件を使ったSELECT文を実行してください。変更されるデータを事前に確認することで、条件指定の間違いを防ぎやすくなります。

特定の1件を更新する

EmployeeIdが1の社員名を、山田太郎から山田一郎へ変更します。

まずは、更新対象が正しいかSELECT文で確認します。

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
FROM Employees
WHERE EmployeeId = 1;

これまで通り行っていれば、以下の画像のような結果がでます。

特定の1件を更新前

EmployeeIdが1のデータだけが表示されたことを確認したら、UPDATEを実行します。

UPDATE Employees
SET EmployeeName = N'山田一郎'
WHERE EmployeeId = 1;

更新後のデータを確認します。

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
FROM Employees
WHERE EmployeeId = 1;

EmployeeNameが山田一郎に変わっていれば、1件のデータ更新は成功です。

特定の1件を更新後

複数のカラムをまとめて更新する

UPDATEでは、1回の処理で複数のカラムを変更できます。

複数のカラムを更新するときは、SET句の指定をカンマで区切ります。

EmployeeIdが2の社員について、部署を企画部、年齢を33歳、給与を400000へ変更します。

最初に、変更対象となる社員情報を確認します。

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
FROM Employees
WHERE EmployeeId = 2;

確認後、次のUPDATEを実行します。

UPDATE Employees
SET
    Department = N'企画部',
    Age = 33,
    Salary = 400000
WHERE EmployeeId = 2;

更新結果を確認します。

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
FROM Employees
WHERE EmployeeId = 2;

Department、Age、Salaryの3項目が変更されていれば、複数カラムの更新は完了です。

複数のカラムをまとめて更新する

Microsoftの公式ドキュメントでも、SET句をカンマで区切ることで複数カラムを更新できる構文が示されています。

条件に一致する複数行を更新する

WHERE句の条件に複数のデータが一致した場合は、該当するすべての行が更新されます。

ここでは、営業部に所属する社員の部署名を営業企画部へ変更します。

最初に、営業部に所属する社員を確認します。

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
FROM Employees
WHERE Department = N'営業部';

EmployeeIdが1と3のデータが表示されることを確認します。

条件に一致する複数行の更新前

続いて、UPDATEを実行します。

UPDATE Employees
SET Department = N'営業企画部'
WHERE Department = N'営業部';

更新結果を確認します。

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
FROM Employees
WHERE Department = N'営業企画部';

2件のデータが表示されれば、条件に一致する複数行がまとめて更新されています

条件に一致する複数行の更新後

現在の値を使って数値を更新する

UPDATEのSET句では、固定値だけでなく、現在カラムに保存されている値を使った計算もできます。

ここでは、営業企画部に所属する社員の給与を10000増やします。

最初に、更新前の給与を確認します。

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Salary
FROM Employees
WHERE Department = N'営業企画部';

次のUPDATEを実行します。

UPDATE Employees
SET Salary = Salary + 10000
WHERE Department = N'営業企画部';

SET句の右側にあるSalaryは更新前の値です。

例えば、更新前の給与が300000の場合は、300000に10000を加えた310000が新しい値として保存されます。

更新後の状態を確認します。

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Salary
FROM Employees
WHERE Department = N'営業企画部';

給与がそれぞれ10000増えていれば、現在値を使った更新は成功です。

現在の値を使って数値を更新する

複数の条件を指定して更新する

WHERE句では、ANDやORを使って複数の条件を指定できます。

ここでは、営業企画部に所属し、なおかつ40歳以上の社員だけを更新します。

最初に、2つの条件に一致するデータを確認します。

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
FROM Employees
WHERE Department = N'営業企画部'
  AND Age >= 40;

以下のようになっていれば、問題ありません。

複数の条件を指定して更新する前

対象が正しいことを確認したら、給与を20000増やします。

UPDATE Employees
SET Salary = Salary + 20000
WHERE Department = N'営業企画部'
  AND Age >= 40;

更新結果を確認します。

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
FROM Employees
WHERE Department = N'営業企画部'
  AND Age >= 40;

ANDを使用すると、すべての条件を満たす行だけが対象になります。

複数の条件を指定して更新する後

複雑なWHERE条件ほど、事前のSELECT確認が重要です。

すべてのデータを更新する

WHERE句を指定せずにUPDATEを実行すると、テーブル内のすべての行が更新されます。

例えば、次のSQLを実行すると、全社員の給与が300000に変更されます。

UPDATE Employees
SET Salary = 300000;

これは構文エラーではありません。

SQL Serverにとっては、すべてのデータを更新する正しいUPDATEです。

ただし、特定の社員だけを更新するつもりで実行すると、重大なデータ破損につながる可能性があります。

WHERE句を省略したUPDATEは、テーブル内の全行を更新します。全件更新が目的でない限り、実行前にWHERE句が指定されていることを確認してください。

全件更新を試す場合は、後述するトランザクションを使用し、ROLLBACKで変更を取り消す方法が安全です。

トランザクションで更新を取り消す

UPDATEを練習するときは、トランザクションを使用すると変更内容を確認してから反映できます。

トランザクションとは、複数のデータベース処理をひとまとまりとして管理する仕組みです。

次のSQLでは、全社員の給与を300000に変更します。
ただし、最初に「BEGIN TRANSACTION;」を入れています。

BEGIN TRANSACTION;

UPDATE Employees
SET Salary = 300000;

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
FROM Employees;

実行すると全員のSalaryが300000になります。

トランザクションで更新を取り消す前

次にROLLBACKを実行し、UPDATE前の状態に戻るか確認します

ROLLBACK後の状態を確認します。

ROLLBACK TRANSACTION;

SELECT
    EmployeeId,
    EmployeeName,
    Department,
    Age,
    Salary
FROM Employees;

給与が元の値に戻っていれば、トランザクションによる取り消しが成功しています。

トランザクションで更新を取り消す後

変更内容を確定するときは、ROLLBACKではなくCOMMITを使用します。

BEGIN TRANSACTION;

UPDATE Employees
SET Salary = Salary + 5000
WHERE Department = N'企画部';

COMMIT TRANSACTION;

COMMITを実行すると変更が確定し、通常は元に戻せません。

UPDATEを実行するときは、BEGIN TRANSACTIONで開始し、結果を確認してからCOMMITする方法が安全です。問題がある場合はROLLBACKを実行すると、確定前の変更を取り消せます。

よくあるエラー・注意点

UPDATEでは、構文エラーだけでなく、SQL自体は正常に実行されたものの、想定と異なるデータが変更されることがあります。

特に、WHERE句、データ型、カラム名の指定を確認してください。

エラー・現象主な原因対処法
Invalid object name ‘Employees’テーブルが存在しない、または別のデータベースを選択しているUSE SqlPracticeDBを実行し、Employeesテーブルが存在するか確認する
Invalid column nameカラム名のスペルが間違っているテーブル定義またはSELECT文で正しいカラム名を確認する
Conversion failed数値型のカラムに文字列を設定するなど、データ型が一致していない更新する値とカラムのデータ型を確認する
Cannot insert the value NULLNOT NULLのカラムにNULLを設定しているNULLを許可する設計に変更するか、NULL以外の値を設定する
0行処理されたWHERE条件に一致するデータが存在しない同じWHERE条件でSELECT文を実行する
想定より多くの行が更新されたWHERE条件が広すぎる主キーなど、一意に特定できる条件を追加する
全データが更新されたWHERE句を指定していないトランザクション中ならROLLBACKする。確定後はバックアップなどからの復旧を検討する
日本語が文字化けするVARCHAR型を使用している、または文字列の指定方法に問題があるNVARCHAR型を使用し、日本語文字列の前にNを付ける
UPDATEが実行できない対象テーブルへの更新権限がないSQL Serverのユーザー権限を確認する

SQL Serverでは、制約違反、NULL制約違反、互換性のないデータ型などが発生した場合、UPDATE処理はキャンセルされ、エラーが返されます。

また、データ量が多い環境では、UPDATE処理によるロックや処理時間にも注意が必要です。大量データを更新する場合は、本番環境で直接実行せず、バックアップや検証環境を用意してください。

UPDATEを安全に実行する流れ

SELECTで対象確認 → BEGIN TRANSACTION → UPDATE実行 → SELECTで結果確認の順番で進めます。 結果に問題がなければCOMMIT、間違っていればROLLBACKを実行してください。

まとめ

この記事では、SQL Server LocalDBとSSMSを使って、UPDATEでデータを更新する方法を解説しました。

UPDATEでは、SET句に変更後の値を指定し、WHERE句で変更するデータを絞り込みます。

重要なポイントは次のとおりです。

  • UPDATEは、テーブルに登録されている既存データを変更する
  • SET句には、変更するカラムと変更後の値を指定する
  • WHERE句を省略すると、すべての行が更新される
  • 複数のカラムは、カンマで区切ってまとめて更新できる
  • 現在の値を使って加算や減算もできる
  • UPDATE前に、同じWHERE条件を使ったSELECT文を実行する
  • 重要なデータを更新するときはトランザクションを使用する

UPDATEは、SQLを扱ううえで使用頻度の高い基本構文です。一方で、SELECT文とは異なり、実行するとデータそのものが変更されます。

慣れるまでは、SELECTで対象確認、UPDATEで変更、SELECTで結果確認という流れを徹底しましょう。

次は、DELETE文によるデータ削除や、BEGIN TRANSACTION、COMMIT、ROLLBACKを使ったトランザクション制御を学ぶと、データをより安全に操作できるようになります。