3

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

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

SELECT RowID = @RowID;

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

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

编辑

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

4

1 回答 1

7

存储过程返回整数。

如果您想要它们返回的结果集,您可以要求 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为您提供每个参数的模式。

综合考虑这三者应该会给你很多你想要的东西。

于 2013-03-08T22:28:03.743 回答