3 c# t-sql sql-server information-schema
这是一个元问题.如何使用INFORMATION_SCHEMA每个数据库提供的方法发现存储过程的返回值?使用函数,显式声明返回值并显示在INFORMATION_SCHEMAunder下ROUTINES.
但是,存储过程似乎是一个奇怪的灰色区域(一直是SP和函数之间的区别).它们似乎正式没有"返回值",但最后你可以运行一个SELECT语句,例如:
SELECT RowID = @RowID;
Run Code Online (Sandbox Code Playgroud)
例如; 在C#中,您从"RowID"列中读取返回值.这清楚地表明存储过程实际上能够返回值,尽管不像函数那样在T-SQL代码的上下文中.
如何在不必解析定义本身的情况下发现这些值及其类型?
编辑
如果要搜索此内容,则存储过程的返回值是隐式的整数,但也可以返回称为结果集的数据.
存储过程返回整数.
如果您想要返回结果集,可以请求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
Run Code Online (Sandbox Code Playgroud)
您还可以调查存储过程的参数,以查看是否标记了任何存储过程OUT.INFORMATION_SCHEMA.PARAMETERS为您提供每个参数的模式.
综合考虑这三种情况应该会给你很多你想要的东西.