出力パラメーターを取得する方法
このトピックでは、出力パラメータとして定義されているパラメータを持つストアド プロシージャを呼び出す方法について説明します。出力パラメータまたは入出力パラメータを取得する際には、ストアド プロシージャによって返された結果がすべて使用されてからでないと、パラメータの戻り値にアクセスできません。
注意
null、DateTime、またはストリームのいずれかの型に初期化または更新される変数を出力パラメータとして使用することはできません。
例
指定した従業員の売上の年度累計を返すストアド プロシージャを呼び出す例を次に示します。PHP 変数 $lastName が入力パラメータで、$salesYTD が出力パラメータです。
注意
$salesYTD を 0.0 に初期化すると、返される PHPTYPE が float に設定されます。データ型の整合性を確保するためには、ストアド プロシージャを呼び出す前に出力パラメータを初期化するか、目的の PHPTYPE を指定する必要があります。PHPTYPE の指定の詳細については、「PHP データ型を指定する方法」を参照してください。
このストアド プロシージャによって返される結果は 1 つだけなので、ストアド プロシージャの実行後、すぐに出力パラメータの戻り値が $salesYTD に格納されます。
注意
正規構文を使用してストアド プロシージャを呼び出すことをお勧めします。正規構文の詳細については、「ストアド プロシージャの呼び出し」を参照してください。
この例では、SQL Server と AdventureWorks データベースがローカル コンピュータにインストールされていることを前提としています。この例をコマンド ラインから実行した場合、すべての出力はコンソールに書き込まれます。
<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Drop the stored procedure if it already exists. */
$tsql_dropSP = "IF OBJECT_ID('GetEmployeeSalesYTD', 'P') IS NOT NULL
DROP PROCEDURE GetEmployeeSalesYTD";
$stmt1 = sqlsrv_query( $conn, $tsql_dropSP);
if( $stmt1 === false )
{
echo "Error in executing statement 1.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Create the stored procedure. */
$tsql_createSP = " CREATE PROCEDURE GetEmployeeSalesYTD
@SalesPerson nvarchar(50),
@SalesYTD money OUTPUT
AS
SELECT @SalesYTD = SalesYTD
FROM Sales.SalesPerson AS sp
JOIN HumanResources.vEmployee AS e
ON e.EmployeeID = sp.SalesPersonID
WHERE LastName = @SalesPerson";
$stmt2 = sqlsrv_query( $conn, $tsql_createSP);
if( $stmt2 === false )
{
echo "Error in executing statement 2.\n";
die( print_r( sqlsrv_errors(), true));
}
/*--------- The next few steps call the stored procedure. ---------*/
/* Define the Transact-SQL query. Use question marks (?) in place of
the parameters to be passed to the stored procedure */
$tsql_callSP = "{call GetEmployeeSalesYTD( ?, ? )}";
/* Define the parameter array. By default, the first parameter is an
INPUT parameter. The second parameter is specified as an OUTPUT
parameter. Initializing $salesYTD to 0.0 sets the returned PHPTYPE to
float. To ensure data type integrity, output parameters should be
initialized before calling the stored procedure, or the desired
PHPTYPE should be specified in the $params array.*/
$lastName = "Blythe";
$salesYTD = 0.0;
$params = array(
array($lastName, SQLSRV_PARAM_IN),
array($salesYTD, SQLSRV_PARAM_OUT)
);
/* Execute the query. */
$stmt3 = sqlsrv_query( $conn, $tsql_callSP, $params);
if( $stmt3 === false )
{
echo "Error in executing statement 3.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Display the value of the output parameter $salesYTD. */
echo "YTD sales for ".$lastName." are ". $salesYTD. ".";
/*Free the statement and connection resources. */
sqlsrv_free_stmt( $stmt1);
sqlsrv_free_stmt( $stmt2);
sqlsrv_free_stmt( $stmt3);
sqlsrv_close( $conn);
?>
参照
処理手順
パラメーターの方向を指定する方法
入出力パラメーターを取得する方法