SQL Serverを使ってデータベース開発やクエリ作成を行う際、変数(Variable)を活用すると、柔軟かつ再利用性の高いコードを書けます。
本記事では、SQL Serverでの変数の宣言(DECLARE)と代入(SET/SELECT)について、初心者向けにやさしく解説します。
記事の最後には演習問題と解答例も用意していますので、ぜひ手を動かしながら学んでください。
変数とは?
プログラミング言語同様、SQL Serverにも変数というデータを一時的に保持する箱があります。変数を使うメリットは主に以下のとおりです。
- 再利用性:同じ値を複数回利用する場合、変数名で参照できる
- 可読性向上:マジックナンバー(数字の直書き)を避け、意味のある名前で扱える
- 動的SQLや条件分岐:変数の値によって処理を変えられる
変数の宣言(DECLARE)
SQL Serverでは、変数を使う前に必ずDECLARE文で宣言します。構文は次のとおりです:
DECLARE @変数名 データ型 [= 初期値];
- @で始まる名前を付ける(例:@userId)
- データ型はSQL Serverの標準型(INT, VARCHAR(n), DATETIMEなど)
- 初期値を同時に指定することも可能(省略時はNULL)
-- 整数型の変数を宣言
DECLARE @count INT;
-- 文字列型の変数を宣言し、初期値を設定
DECLARE @message VARCHAR(100) = 'Hello, SQL Server!';
変数への値の代入(SET と SELECT)
宣言した変数には、SETまたはSELECT文で値を代入できます。
SET文による代入
-- 変数@countに5を代入
SET @count = 5;
-- 別の変数にも計算結果を代入
SET @count = @count + 10;
SETは単一の変数に対して値を設定するときに使います。
SELECT文による代入
SELECTはクエリ結果を直接変数へ代入できます。
結果が複数行の場合、最後の行の値が格納されます。
-- テーブルから取得した値を変数に代入
SELECT @userName = Name
FROM Users
WHERE UserId = 1;
-- 複数変数へ一度に代入も可能
SELECT @id = Id, @email = Email
FROM Users
WHERE UserId = 2;
変数の活用例
単純な計算処理
DECLARE @price DECIMAL(10,2) = 1200.50;
DECLARE @quantity INT = 3;
DECLARE @total DECIMAL(10,2);
SET @total = @price * @quantity;
PRINT '合計金額: ' + CONVERT(VARCHAR(20), @total);
動的SQLの一部として使用
DECLARE @tableName NVARCHAR(128) = N'Orders';
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'SELECT TOP 10 * FROM ' + QUOTENAME(@tableName) + ';';
EXEC sp_executesql @sql;
条件分岐とループ
DECLARE @i INT = 1;
WHILE @i <= 5
BEGIN
PRINT 'ループ回数: ' + CONVERT(VARCHAR(10), @i);
SET @i = @i + 1;
END
ベストプラクティス
- 意味のある名前を付ける:@cntよりも@orderCountなど。
- NULLチェックを忘れずに:意図しないNULL代入でエラーになる場合がある。
- 適切なデータ型を選択:VARCHARの長さは必要最小限に。
- コメントを活用:複雑な処理では変数の役割をコメントで補足。
演習問題
以下の演習問題に挑戦し、記事で学んだ変数の宣言と代入を実践してみましょう。
問題1
商品テーブル(Products)から、ProductId = 10の商品のPriceを取得し、変数@priceに代入してください。
問題2
変数@aと@bにそれぞれ任意の整数を代入し、変数@sumに両者の合計を代入した上で結果をPRINTしてください。
問題3
UsersテーブルのUserIdが3のユーザーからFirstNameとLastNameを取得し、変数@firstNameと@lastNameに代入した後、フルネームを結合してPRINTしてください。
問題4
WHILEループを使い、変数@nを1から10までインクリメントしながら、各回の@n * @n(二乗)をPRINTしてください。
解答例
問題1の解答例
DECLARE @price DECIMAL(10,2);
SELECT @price = Price
FROM Products
WHERE ProductId = 10;
PRINT 'Product 10の価格: ' + CONVERT(VARCHAR(20), @price);
問題2の解答例
DECLARE @a INT = 7;
DECLARE @b INT = 5;
DECLARE @sum INT;
SET @sum = @a + @b;
PRINT '合計: ' + CONVERT(VARCHAR(10), @sum);
問題3の解答例
DECLARE @firstName NVARCHAR(50);
DECLARE @lastName NVARCHAR(50);
SELECT @firstName = FirstName, @lastName = LastName
FROM Users
WHERE UserId = 3;
PRINT 'フルネーム: ' + @firstName + ' ' + @lastName;
問題4の解答例
DECLARE @n INT = 1;
WHILE @n <= 10
BEGIN
PRINT 'n=' + CONVERT(VARCHAR(10), @n) + ' の二乗=' + CONVERT(VARCHAR(10), @n * @n);
SET @n = @n + 1;
END
まとめ
本記事では、SQL Serverにおける変数の宣言と代入方法、活用例、ベストプラクティス、そして演習問題を通じて、基礎から学びました。
変数を使いこなすことで、可読性や再利用性が向上し、より効率的なクエリ作成が可能になります。ぜひ実際の業務や学習環境で試してみてください!