SQL Server -以编程方式发现存储过程的返回值

本文关键字:发现 存储过程 返回值 方式 编程 Server SQL | 更新日期: 2023-09-27 18:03:07

这是个元问题。如何使用每个数据库提供的INFORMATION_SCHEMA来发现存储过程的返回值?对于函数,返回值被显式声明,并显示在ROUTINES下的INFORMATION_SCHEMA中。

然而,存储过程似乎是一个奇怪的灰色地带(就像SP和函数之间的区别一样)。它们似乎没有"返回值",但在最后你可以运行SELECT语句,如:

SELECT RowID = @RowID;
例如

;在c#中,你从列"RowID"中读取返回值。这清楚地表明,存储过程实际上能够返回值,尽管不像函数那样在T-SQL代码的上下文中返回值。

如何在不解析定义本身的情况下发现这些值及其类型?

编辑

如果您正在搜索这个,存储过程的返回值隐式地是整数,但也可以返回称为结果集的数据

SQL Server -以编程方式发现存储过程的返回值

存储过程返回整数。

如果你想要他们返回的结果集,你可以要求SQL Server解析存储过程来给你这个信息。

SQL Server 2012引入sys.dm_exec_describe_first_result_set_for_object取代SET FMTONLY

CREATE PROC TestProc2
AS
SELECT object_id, name FROM sys.objects ;
SELECT name, schema_id, create_date FROM sys.objects ;
GO
SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 0) ;
SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 1) ;
GO

您还可以研究存储过程的参数,看看是否有任何参数被标记为OUTINFORMATION_SCHEMA.PARAMETERS给出了每个参数的模式。

把这三个结合起来看,你会得到很多你想要的东西。