次の列と値を持つ SQL テーブルがあるとします。
+----+---------+------------+---------+------------+
| ID | Status1 | Condition1 | Status2 | Condition2 |
+----+---------+------------+---------+------------+
| 1 | 1 | 1 | 1 | 1 |
| 2 | 1 | 0 | 1 | 1 |
| 3 | 1 | 1 | 1 | 0 |
| 4 | 1 | 0 | 1 | 0 |
+----+---------+------------+---------+------------+
Condition1 と Condition2 の値に応じて、Status1 と Status2 の値をそれぞれ更新したいと考えています。
私のSQL文は次のようになります。
UPDATE
myTable
SET
Status1 = CASE Condition1
WHEN 1 THEN 3
ELSE 4
END,
Status2 = CASE Condition2
WHEN 1 THEN 3
ELSE 4
END
WHERE
ID = @targetRowID
各 ID のテーブルに対して上記の SQL ステートメントを個別に実行すると、次の値になります。
+----+---------+------------+---------+------------+
| ID | Status1 | Condition1 | Status2 | Condition2 |
+----+---------+------------+---------+------------+
| 1 | 3 | 1 | 3 | 1 |
| 2 | 4 | 0 | 3 | 1 |
| 3 | 3 | 1 | 4 | 0 |
| 4 | 4 | 0 | 4 | 0 |
+----+---------+------------+---------+------------+
Entity Framework では、次のようにして同じ種類の更新を行います。
var myRow = dbContext.myTable.Single(r => r.ID == 1);
myRow.Status1 = (myRow.Condition1 == 1) ? 3 : 4;
myRow.Status2 = (myRow.Condition2 == 1) ? 3 : 4;
dbContext.SaveChanges();
これは機能しますが、最初にデータベースからデータをフェッチし、次に 2 番目のクエリを実行して更新を行います。上記の単純な SQL コードのように、更新をすべて一度に行うことは可能ですか?