10

次の T-SQL コード スニペットを検討してください。

CREATE PROC dbo.SquareNum(@i INT OUTPUT)
AS
BEGIN
    SET @i = @i * @i
    --SELECT @i
END
GO

DECLARE @a INT = 3, @b INT = 5
EXEC dbo.SquareNum @a OUTPUT
EXEC dbo.SquareNum @b
SELECT @a AS ASQUARE, @b AS BSQUARE
GO
DROP PROC dbo.SquareNum

結果セットは次のとおりです。

ASQUARE     BSQUARE
----------- -----------
9           5

ご覧のとおり、@b二乗されていません。b/c 出力パラメーターとして渡されませんでした (パラメーターOUTPUTを渡すときに修飾子はありません)。

パラメータが実際にパラメータとして渡されたかどうかを確認するために、ストアド プロシージャ本体 (この場合は dbo.SquareNum 本体) 内をチェックできる方法があるかどうか知りたいOUTPUTですか?

4

5 に答える 5

0

これは、sys ビューにクエリを実行することで実行できます。

select 
    p.name as proc_name,
    par.name as parameter_name,
    par.is_output
from sys.procedures p
inner join sys.parameters par on par.object_id=p.object_id
where p.name = 'SquareNum'

または、データベース ツリーで Management Studio をチェックインします: [データベース] -> プログラマビリティ -> ストアド プロシージャ -> [プロシージャ] -> パラメータ

于 2016-04-18T10:50:16.087 に答える
0

たぶん私は間違っているかもしれませんが、それが可能だとは思いません。OUTPUT はストアド プロシージャ定義の一部であるため、パラメーターがいつ OUTPUT であるかどうかを知る必要があります。動的に設定する方法がないので、パラメータがいつ出力されるかをコードで判断することは、すでにわかっているので意味がないと思います。

動的コードを記述しようとしている場合は、Piotr Lasota の回答により、パラメーターがいつ出力されるかを理解する正しい方法に導かれるはずです。

于 2016-07-12T15:34:13.220 に答える