T-SQL存储过程 - 检测参数是否作为OUTPUT提供

M. *_*hid 8 t-sql sql-server stored-procedures output-parameter

请考虑以下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
Run Code Online (Sandbox Code Playgroud)

结果集是:

ASQUARE     BSQUARE
----------- -----------
9           5
Run Code Online (Sandbox Code Playgroud)

可以看出,@b不是平方,b/c它没有作为输出参数传入(OUTPUT传入参数时没有限定符).

我想知道是否有一种方法可以检查存储过程体(在本例中为dbo.SquareNum体),以查看参数是否确实已作为OUTPUT参数传入?

小智 0

您可以通过查询系统视图来完成此操作:

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'
Run Code Online (Sandbox Code Playgroud)

或检查 Management Studio 中的数据库树:[数据库] -> 可编程性 -> 存储过程 -> [过程] -> 参数

  • 我认为问题是如何检测调用存储过程的代码中是否使用了“OUTPUT”关键字,而不是存储过程定义。 (8认同)