C# SQL Server-以编程方式发现存储过程的返回值
这是一个元问题。如何使用每个数据库提供的信息_模式发现存储过程的返回值?对于函数,返回值被显式声明并显示在例程下的信息_模式中 然而,存储过程似乎是一个奇怪的灰色区域,SP和函数之间的区别总是如此。它们似乎没有正式的“返回值”,但最后您可以运行SELECT语句,例如:C# SQL Server-以编程方式发现存储过程的返回值,c#,sql-server,tsql,information-schema,C#,Sql Server,Tsql,Information Schema,这是一个元问题。如何使用每个数据库提供的信息_模式发现存储过程的返回值?对于函数,返回值被显式声明并显示在例程下的信息_模式中 然而,存储过程似乎是一个奇怪的灰色区域,SP和函数之间的区别总是如此。它们似乎没有正式的“返回值”,但最后您可以运行SELECT语句,例如: SELECT RowID = @RowID; 比如,;在C中,从列“RowID”读取返回值。这表明存储过程实际上能够返回值,尽管不像函数那样在T-SQL代码的上下文中 如何在不解析定义本身的情况下发现这些值及其类型 编辑 如果您
SELECT RowID = @RowID;
比如,;在C中,从列“RowID”读取返回值。这表明存储过程实际上能够返回值,尽管不像函数那样在T-SQL代码的上下文中
如何在不解析定义本身的情况下发现这些值及其类型
编辑
如果您正在搜索,则存储过程的返回值隐式为整数,但也可以返回称为结果集的数据。存储过程返回整数 如果希望返回结果集,可以要求SQL Server解析存储过程以提供此信息 SQL Server 2012引入了一种快速替换SET的方法 您还可以研究存储过程的参数,以查看是否标记了其中的任何参数。提供每个参数的模式
综合考虑这三个因素,你会得到很多你想要的东西 存储过程的返回值称为。。。返回值。它们总是隐式返回一个整数0。但它们也可以有OUT参数和结果集。因此,当我选择ROWID=@ROWID时,这不是一个返回值,而是一个结果集?我相信这是描述它的技术上最正确的方式,但是,如果一位同事过来告诉我,我希望这个存储过程的返回值是5行而不是6行,我就知道他在说什么了。你抱怨语义。如果你想让这些东西正确,语义是至关重要的。请不要拒绝他们。结果集和返回值是完全不同的事情!在2008 R2或2008中是否提供此类功能?请将FMTONLY设置为ON,但在使用之前请阅读文档。它有一些问题。这主要是为了为服务生成输入和输出对象。这是一个中介过程,因此它不必完美地工作,它只是能够不必手动重写返回类型。
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