SQL Server で SELECT INTO @variable を使って変数に値を代入する方法
SQL Server で SELECT INTO @variable を使って変数に値を代入する方法
変数を宣言する
まず、DECLARE
ステートメントを使って変数を宣言します。変数の名前とデータ型を指定する必要があります。
DECLARE @variable_name data_type;
例:
DECLARE @my_variable int;
SELECT ステートメントで値を取得する
次に、SELECT
ステートメントを使って、データベースから値を取得します。
SELECT @variable_name = column_name
FROM table_name
WHERE condition;
SELECT @my_variable = COUNT(*)
FROM Customers
WHERE Country = 'Japan';
変数の値を使用する
最後に、SELECT
ステートメントで取得した値を変数として使用できます。
PRINT @variable_name;
PRINT @my_variable;
この例では、Customers
テーブルの Country
列が Japan
であるレコードの数を @my_variable
変数に格納し、その値を出力します。
注意事項
SELECT
ステートメントは 1 つの値のみを返す必要があります。複数の値を返す場合は、エラーが発生します。- 変数のデータ型は、
SELECT
ステートメントで取得する値のデータ型と一致する必要があります。
SELECT INTO
を使って、複数の値を複数の変数に代入することができます。
DECLARE @name varchar(50), @age int;
SELECT @name = FirstName, @age = Age
FROM Customers
WHERE CustomerID = 1;
DECLARE @total_price decimal(18,2);
SELECT @total_price = SUM(Quantity * Price)
FROM OrderDetails
WHERE OrderID = 1;
補足
- 上記の説明は、基本的な内容のみを記載しています。詳細については、上記の関連情報などを参照してください。
- SQL Server のバージョンによって、
SELECT INTO
の機能が異なる場合があります。
単一の値を変数に代入する
-- 変数を宣言する
DECLARE @my_variable int;
-- SELECT ステートメントで値を取得する
SELECT @my_variable = COUNT(*)
FROM Customers
WHERE Country = 'Japan';
-- 変数の値を使用する
PRINT @my_variable;
複数の値を複数の変数に代入する
-- 変数を宣言する
DECLARE @name varchar(50), @age int;
-- SELECT ステートメントで値を取得する
SELECT @name = FirstName, @age = Age
FROM Customers
WHERE CustomerID = 1;
-- 変数の値を使用する
PRINT @name + ', ' + @age;
このコードは、Customers
テーブルの CustomerID
が 1 であるレコードの FirstName
列と Age
列の値を @name
変数と @age
変数に格納し、それらの値を結合して出力します。
式を変数に代入する
-- 変数を宣言する
DECLARE @total_price decimal(18,2);
-- SELECT ステートメントで値を取得する
SELECT @total_price = SUM(Quantity * Price)
FROM OrderDetails
WHERE OrderID = 1;
-- 変数の値を使用する
PRINT @total_price;
このコードは、OrderDetails
テーブルの OrderID
が 1 であるレコードの Quantity
列と Price
列の値を乗算して合計し、その値を @total_price
変数に格納して出力します。
上記以外にも、SELECT INTO
を使って様々な処理を行うことができます。詳細は、上記の関連情報などを参照してください。
SQL Server で変数に値を代入する他の方法
DECLARE @my_variable int;
SET @my_variable = 10;
PRINT @my_variable;
このコードは、@my_variable
変数に 10 という値を代入し、その値を出力します。
EXECUTE AS
ステートメントを使って、別のユーザーのコンテキストで変数に値を代入することができます。
DECLARE @my_variable int;
EXECUTE AS USER = 'sa'
SET @my_variable = 10;
REVERT;
PRINT @my_variable;
OUTPUT パラメータ
ストアドプロシージャの OUTPUT パラメータを使って、変数に値を代入することができます。
CREATE PROCEDURE dbo.GetCustomerCount
(
@Country varchar(50),
@CustomerCount int OUTPUT
)
AS
BEGIN
SELECT @CustomerCount = COUNT(*)
FROM Customers
WHERE Country = @Country;
END;
DECLARE @my_variable int;
EXEC dbo.GetCustomerCount @Country = 'Japan', @CustomerCount = @my_variable OUTPUT;
PRINT @my_variable;
- 简单的に値を代入したい場合は、
SET
ステートメントを使うのが最も簡単です。 - 別のユーザーのコンテキストで変数に値を代入したい場合は、
EXECUTE AS
ステートメントを使う必要があります。 - ストアドプロシージャから値を返したい場合は、OUTPUT パラメータを使う必要があります。
sql sql-server t-sql