DECLARE ステートメント、SET ステートメント、EXEC ステートメントによる変数への代入
SQL Server 2005 で選択クエリの結果を変数に設定するには、いくつか方法があります。
方法
-
DECLARE ステートメント
DECLARE @variable_name datatype; SELECT @variable_name = column_name FROM table_name WHERE condition;
例:
DECLARE @customer_name VARCHAR(50); SELECT @customer_name = Name FROM Customers WHERE CustomerID = 1; -- 後続の処理で @customer_name 変数を使用
-
SET ステートメント
SET @variable_name = (SELECT column_name FROM table_name WHERE condition);
SET @order_total = (SELECT SUM(Quantity * UnitPrice) FROM OrderDetails WHERE OrderID = 10); -- 後続の処理で @order_total 変数を使用
-
EXEC sp_executesql @stmt = N'SELECT @variable_name = column_name FROM table_name WHERE condition', @params = N'@variable_name VARCHAR(50) OUTPUT'
EXEC sp_executesql @stmt = N'SELECT @product_name = Name FROM Products WHERE ProductID = @product_id', @params = N'@product_id INT, @product_name VARCHAR(50) OUTPUT', @product_id = 5 -- 後続の処理で @product_name 変数を使用
注意事項
- 変数名は
@
記号で始まり、有効な識別子である必要があります。 - データ型は、選択クエリの結果のデータ型と一致する必要があります。
SET NOCOUNT ON
ステートメントを使用して、クエリの実行結果の行数を抑制することができます。
顧客の名前を取得する
DECLARE @customer_name VARCHAR(50);
SELECT @customer_name = Name
FROM Customers
WHERE CustomerID = 1;
PRINT '顧客名:' + @customer_name;
注文の合計金額を取得する
SET @order_total = (SELECT SUM(Quantity * UnitPrice)
FROM OrderDetails
WHERE OrderID = 10);
PRINT '注文合計金額:' + CAST(@order_total AS VARCHAR(10));
商品の名前を取得する
EXEC sp_executesql @stmt = N'SELECT @product_name = Name
FROM Products
WHERE ProductID = @product_id',
@params = N'@product_id INT, @product_name VARCHAR(50) OUTPUT',
@product_id = 5
PRINT '商品名:' + @product_name;
追加情報
- 上記以外にも、
SELECT INTO
ステートメントを使用して、選択クエリの結果をテーブル変数に格納することができます。
SQL Server 2005 で選択クエリの結果を変数に設定する他の方法
OUTPUT パラメータ
ストアドプロシージャを使用して、選択クエリの結果を OUTPUT パラメータとして返すことができます。
CREATE PROCEDURE GetCustomerName
@CustomerID INT,
@CustomerName VARCHAR(50) OUTPUT
AS
BEGIN
SELECT @CustomerName = Name
FROM Customers
WHERE CustomerID = @CustomerID;
END
DECLARE @customer_name VARCHAR(50);
EXEC GetCustomerName @CustomerID = 1, @CustomerName = @customer_name OUTPUT;
PRINT '顧客名:' + @customer_name;
テーブル変数
DECLARE @Customers TABLE (
CustomerID INT,
Name VARCHAR(50)
);
SELECT *
INTO @Customers
FROM Customers
WHERE Country = 'Japan';
-- 後続の処理で @Customers テーブル変数を使用
カーソルを使用して、選択クエリの結果を逐次処理することができます。
DECLARE @cursor CURSOR;
DECLARE @CustomerID INT,
@CustomerName VARCHAR(50);
SET @cursor = CURSOR FOR
SELECT CustomerID, Name
FROM Customers
WHERE Country = 'Japan';
OPEN @cursor;
FETCH NEXT FROM @cursor
INTO @CustomerID, @CustomerName;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '顧客 ID:' + CAST(@CustomerID AS VARCHAR(10));
PRINT '顧客名:' + @CustomerName;
FETCH NEXT FROM @cursor
INTO @CustomerID, @CustomerName;
END
CLOSE @cursor;
DEALLOCATE @cursor;
sql sql-server sql-server-2005