SQL Server 2005 のストアドプロシージャから SELECT する方法
SQL Server 2005 のストアドプロシージャから SELECT する方法
方法
- ストアドプロシージャの作成
CREATE PROCEDURE [dbo].[GetCustomers]
AS
BEGIN
SELECT *
FROM Customers
END
- SELECT ステートメントの実行
EXEC [dbo].[GetCustomers]
この例では、GetCustomers
という名前のストアドプロシージャを作成します。このストアドプロシージャは Customers
テーブルからすべてのデータを選択します。
SELECT ステートメントでストアドプロシージャからデータを抽出する方法はいくつかあります。
- *SELECT : すべての列を選択します。
- WHERE 句: 条件に基づいてデータを選択します。
- ORDER BY 句: データを並べ替えます。
例:
- すべての列を選択して、名前で昇順に並べ替える
EXEC [dbo].[GetCustomers]
ORDER BY Name ASC
EXEC [dbo].[GetCustomers]
SELECT Name, Age
ORDER BY Age DESC
EXEC [dbo].[GetCustomers]
WHERE Country = 'Japan'
ストアドプロシージャは、パラメータを受け取ることができます。パラメータは、ストアドプロシージャの動作を制御するために使用できます。
CREATE PROCEDURE [dbo].[GetCustomersByCountry]
@Country VARCHAR(50)
AS
BEGIN
SELECT *
FROM Customers
WHERE Country = @Country
END
このストアドプロシージャは、Country
パラメータを受け取ります。このパラメータは、Customers
テーブルから選択する国の名前を指定するために使用されます。
ストアドプロシージャを実行するには、EXEC ステートメントを使用します。
EXEC [dbo].[GetCustomersByCountry]
@Country = 'Japan'
この例では、GetCustomersByCountry
ストアドプロシージャを実行します。Country
パラメータは 'Japan' に設定されています。
USE AdventureWorks2019
CREATE PROCEDURE [dbo].[GetProductsByCategory]
@CategoryName VARCHAR(50)
AS
BEGIN
SELECT
ProductID,
Name,
ProductCategory.Name AS CategoryName,
Manufacturer,
ListPrice,
QuantityInStock
FROM Production.Product
INNER JOIN Production.ProductCategory ON Product.ProductCategoryID = ProductCategory.ProductCategoryID
WHERE ProductCategory.Name = @CategoryName
END
EXEC [dbo].[GetProductsByCategory]
@CategoryName = 'Bikes'
結果
ProductID | Name | CategoryName | Manufacturer | ListPrice | QuantityInStock
----------+------------+-------------+-------------+-----------+-----------------
717 | Touring Bike | Bikes | Trek | 807.99 | 23
720 | Road Bike | Bikes | Cannondale | 1599.99 | 12
721 | Mountain Bike | Bikes | Specialized | 2149.99 | 10
EXEC [dbo].[GetProductsByCategory]
@CategoryName = 'Bikes'
ORDER BY ListPrice ASC
EXEC [dbo].[GetProductsByCategory]
@CategoryName = 'Bikes'
SELECT ProductID, Name
ORDER BY Name DESC
EXEC [dbo].[GetProductsByCategory]
@CategoryName = 'Bikes'
WHERE Manufacturer = 'Trek'
ストアドプロシージャは、複数のパラメータを受け取ることができます。
CREATE PROCEDURE [dbo].[GetProductsByCategoryAndPrice]
@CategoryName VARCHAR(50),
@MinPrice DECIMAL(18,2),
@MaxPrice DECIMAL(18,2)
AS
BEGIN
SELECT
ProductID,
Name,
ProductCategory.Name AS CategoryName,
Manufacturer,
ListPrice,
QuantityInStock
FROM Production.Product
INNER JOIN Production.ProductCategory ON Product.ProductCategoryID = ProductCategory.ProductCategoryID
WHERE ProductCategory.Name = @CategoryName
AND ListPrice BETWEEN @MinPrice AND @MaxPrice
END
CategoryName
: カテゴリ名MinPrice
: 最低価格
EXEC [dbo].[GetProductsByCategoryAndPrice]
@CategoryName = 'Bikes',
@MinPrice = 1000,
@MaxPrice = 2000
この例では、GetProductsByCategoryAndPrice
ストアドプロシージャを実行します。
CategoryName
パラメータは 'Bikes' に設定されています。MinPrice
パラメータは 1000 に設定されています。
ProductID | Name | CategoryName | Manufacturer | ListPrice | QuantityInStock
----------+------------+-------------+-------------+-----------+-----------------
720 | Road Bike | Bikes | Cannondale | 1599.99 | 12
SELECT ステートメントを使用してストアドプロシージャからデータを抽出する他の方法
OUTPUT 句を使用して、ストアドプロシージャからデータをクライアントアプリケーションに送信できます。
CREATE PROCEDURE [dbo].[GetProductsByCategory]
@CategoryName VARCHAR(50)
AS
BEGIN
SELECT
ProductID,
Name,
ProductCategory.Name AS CategoryName,
Manufacturer,
ListPrice,
QuantityInStock
FROM Production.Product
INNER JOIN Production.ProductCategory ON Product.ProductCategoryID = ProductCategory.ProductCategoryID
WHERE ProductCategory.Name = @CategoryName
OUTPUT
ProductID,
Name,
CategoryName,
Manufacturer,
ListPrice,
QuantityInStock
END
このストアドプロシージャは、GetProductsByCategory
という名前のストアドプロシージャと同じですが、OUTPUT 句を使用してデータをクライアントアプリケーションに送信します。
EXEC [dbo].[GetProductsByCategory]
@CategoryName = 'Bikes'
ProductID | Name | CategoryName | Manufacturer | ListPrice | QuantityInStock
----------+------------+-------------+-------------+-----------+-----------------
717 | Touring Bike | Bikes | Trek | 807.99 | 23
720 | Road Bike | Bikes | Cannondale | 1599.99 | 12
721 | Mountain Bike | Bikes | Specialized | 2149.99 | 10
TEMPORARY TABLE を使用して、ストアドプロシージャからデータを抽出できます。
CREATE PROCEDURE [dbo].[GetProductsByCategory]
@CategoryName VARCHAR(50)
AS
BEGIN
CREATE TABLE #Products (
ProductID INT,
Name VARCHAR(50),
CategoryName VARCHAR(50),
Manufacturer VARCHAR(50),
ListPrice DECIMAL(18,2),
QuantityInStock INT
)
INSERT INTO #Products
SELECT
ProductID,
Name,
ProductCategory.Name AS CategoryName,
Manufacturer,
ListPrice,
QuantityInStock
FROM Production.Product
INNER JOIN Production.ProductCategory ON Product.ProductCategoryID = ProductCategory.ProductCategoryID
WHERE ProductCategory.Name = @CategoryName
SELECT *
FROM #Products
DROP TABLE #Products
END
EXEC [dbo].[GetProductsByCategory]
@CategoryName = 'Bikes'
ProductID | Name | CategoryName | Manufacturer | ListPrice | QuantityInStock
----------+------------+-------------+-------------+-----------+-----------------
717 | Touring Bike | Bikes | Trek | 807.99 | 23
720 | Road Bike | Bikes | Cannondale | 1599.99 | 12
721 | Mountain Bike | Bikes | Specialized | 2149.99 | 10
CREATE PROCEDURE [dbo].[GetProductsByCategory]
@CategoryName VARCHAR(50)
AS
BEGIN
DECLARE @Cursor CURSOR
DECLARE @ProductID INT
DECLARE @Name VARCHAR(50)
DECLARE @CategoryName VARCHAR(50)
DECLARE @Manufacturer VARCHAR(50)
DECLARE @ListPrice DECIMAL(18,2)
DECLARE @QuantityInStock INT
SET @Cursor = CURSOR FOR
SELECT
ProductID,
Name,
ProductCategory.Name AS CategoryName,
Manufacturer,
ListPrice,
QuantityInStock
FROM Production.Product
INNER JOIN Production.ProductCategory ON Product.ProductCategoryID = ProductCategory.ProductCategoryID
WHERE ProductCategory.Name = @CategoryName
OPEN @Cursor
sql sql-server sql-server-2005