SQL Server で sp_executesql ストアド プロシージャを使用する場合に出力パラメータを指定する方法

適用対象: Microsoft SQL Server 2005 Standard EditionMicrosoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Enterprise Edition

概要


sp_executesql システム ストアド プロシージャは、複数回再利用できる T-SQL ステートメントを実行したり、動的に構築された T-SQL ステートメントを実行するために使用されます。 T-SQL ステートメントまたはバッチを処理するために、パラメータを入力として受け取ります。 また、T-SQL ステートメントから生成されたすべての出力を格納できるように出力パラメータを指定することもできます (ただし、これは SQL Server Books Online には記載されていません)。

sp_executesql で出力パラメータが役立つ 2 つのシナリオは次のとおりです。
  • sp_executesql が役に立つ出力を生成する場合、この出力を出力パラメータに格納すると、呼び出し元のバッチが後でクエリにパラメータを使用できます。
  • sp_executesql が出力パラメータを使用して定義されたストアド プロシージャを実行している場合、sp_executesql の出力パラメータを使用して、ストアド プロシージャから生成された出力を保持できます。

詳細情報


次の 2 つの例は、sp_executesql を使用した出力パラメータの使用を示しています。

例 1
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @IntVariable INT
DECLARE @Lastlname varchar(30)
SET @SQLString = N'SELECT @LastlnameOUT = max(lname)
FROM pubs.dbo.employee WHERE job_lvl = @level'
SET @ParmDefinition = N'@level tinyint,
@LastlnameOUT varchar(30) OUTPUT'
SET @IntVariable = 35
EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@level = @IntVariable,
@LastlnameOUT=@Lastlname OUTPUT
SELECT @Lastlname
例 2
CREATE PROCEDURE Myproc
@parm varchar(10),
@parm1OUT varchar(30) OUTPUT,
@parm2OUT varchar(30) OUTPUT
AS
SELECT @parm1OUT='parm 1' + @parm
SELECT @parm2OUT='parm 2' + @parm
GO
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @parmIN VARCHAR(10)
DECLARE @parmRET1 VARCHAR(30)
DECLARE @parmRET2 VARCHAR(30)
SET @parmIN=' returned'
SET @SQLString=N'EXEC Myproc @parm,
@parm1OUT OUTPUT, @parm2OUT OUTPUT'
SET @ParmDefinition=N'@parm varchar(10),
@parm1OUT varchar(30) OUTPUT,
@parm2OUT varchar(30) OUTPUT'

EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@parm=@parmIN,
@parm1OUT=@parmRET1 OUTPUT,@parm2OUT=@parmRET2 OUTPUT

SELECT @parmRET1 AS "parameter 1", @parmRET2 AS "parameter 2"
go
drop procedure Myproc
詳細については、SQL Server Books Online の「sp_executesql (T-SQL)」および「Using sp_executesql」を参照してください。 詳細については、SQL Server Books Online の「Using sp_executesql」、SQL Server 7.0 Books Online の「sp_executesql (T-SQL)」、SQL Server 2000 Books Online の 「sp_executesql」を参照してください。