中級者向け:FORループを使いこなして、SQL Serverのデータ更新を自動化
SQL Server における FOR ループ構文
構文
FOR <loop_variable> IN (<start_value>, <end_value>)
BEGIN
-- ループ内で実行する処理
END
各要素の説明
<loop_variable>
: ループ変数。ループ内で使用する変数です。<start_value>
: 開始値。ループの開始値を指定します。BEGIN
: ループ処理の開始を示すキーワードです。
例
以下の例では、1 から 10 までの数字を出力する FOR ループを示します。
FOR i IN (1, 10)
BEGIN
SELECT i;
END
この例では、i
というループ変数を使い、1 から 10 までの値を順番に出力しています。
FOR ループは、さまざまな処理に利用できます。以下は、FOR ループの応用例です。
- テーブルの全レコードを処理する
- 特定の条件に合致するレコードを検索する
- 集計処理を行う
- データの更新・削除を行う
注意点
FOR ループを使用する際には、以下の点に注意する必要があります。
- ループ変数は、
DECLARE
ステートメントで事前に宣言する必要があります。 - 開始値と終了値は、同じデータ型である必要があります。
- ループ処理内で、ループ変数を変更することは可能です。
- 無限ループにならないように、ループ条件を正しく設定する必要があります。
DECLARE @table_name VARCHAR(50)
SET @table_name = 'Customers'
DECLARE @cursor CURSOR
SET @cursor = CURSOR FOR
SELECT *
FROM @table_name
OPEN @cursor
FETCH NEXT FROM @cursor
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT * FROM @cursor
FETCH NEXT FROM @cursor
END
CLOSE @cursor
DEALLOCATE @cursor
このコードでは、Customers
テーブルの全レコードを処理し、各レコードの内容を出力しています。
DECLARE @product_name VARCHAR(50)
SET @product_name = 'Product A'
DECLARE @cursor CURSOR
SET @cursor = CURSOR FOR
SELECT *
FROM Products
WHERE ProductName = @product_name
OPEN @cursor
FETCH NEXT FROM @cursor
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT * FROM @cursor
FETCH NEXT FROM @cursor
END
CLOSE @cursor
DEALLOCATE @cursor
このコードでは、Products
テーブルから ProductName
が Product A
であるレコードを検索し、そのレコードの内容を出力しています。
DECLARE @total_sales INT
SET @total_sales = 0
DECLARE @cursor CURSOR
SET @cursor = CURSOR FOR
SELECT SalesAmount
FROM Orders
OPEN @cursor
FETCH NEXT FROM @cursor
WHILE @@FETCH_STATUS = 0
BEGIN
SET @total_sales = @total_sales + SalesAmount
FETCH NEXT FROM @cursor
END
CLOSE @cursor
DEALLOCATE @cursor
SELECT @total_sales AS TotalSales
このコードでは、Orders
テーブルの SalesAmount
列の合計値を計算しています。
DECLARE @cursor CURSOR
SET @cursor = CURSOR FOR
SELECT *
FROM Customers
OPEN @cursor
FETCH NEXT FROM @cursor
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE Customers
SET LastName = 'Smith'
WHERE CustomerID = @CustomerID
FETCH NEXT FROM @cursor
END
CLOSE @cursor
DEALLOCATE @cursor
このコードでは、Customers
テーブルの LastName
列を Smith
に更新しています。
FOR ループは、SQL Server で繰り返し処理を行うための便利な構文です。さまざまな処理に利用できるため、覚えておくと便利です。
サンプルコードを参考に、FOR ループを活用してさまざまな処理を行ってみてください。
FOR ループ以外の繰り返し処理方法
DECLARE @i INT
SET @i = 1
WHILE @i <= 10
BEGIN
SELECT @i;
SET @i = @i + 1
END
WHILE ループは、条件が真である限り処理を繰り返します。
REPEAT
SELECT i;
SET i = i + 1;
UNTIL i > 10;
REPEAT ループは、UNTIL ステートメントで指定された条件が真になるまで処理を繰り返します。
DECLARE @cursor CURSOR
SET @cursor = CURSOR FOR
SELECT *
FROM Customers
OPEN @cursor
FETCH NEXT FROM @cursor
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT * FROM @cursor
FETCH NEXT FROM @cursor
END
CLOSE @cursor
DEALLOCATE @cursor
CURSOR は、テーブルのレコードを順番に処理するための方法です。
WHILE EXISTS (SELECT * FROM Customers)
BEGIN
SELECT * FROM Customers
DELETE FROM Customers
END
WHILE EXISTS は、指定されたテーブルにレコードが存在する限り処理を繰り返します。
- 処理内容がシンプルで、ループ回数が決まっている場合は、FOR ループが最も効率的です。
- 処理内容が複雑で、ループ回数が決まっていない場合は、WHILE ループや REPEAT ループを使用します。
- テーブルのレコードを順番に処理する必要がある場合は、CURSOR を使用します。
- 特定の条件を満たすレコードを処理する必要がある場合は、WHILE EXISTS を使用します。
FOR ループ以外にも、SQL Server で繰り返し処理を行う方法はいくつかあります。それぞれの方法の特徴を理解し、処理内容や状況に応じて適切な方法を選択することが重要です。
sql sql-server loops