Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL Server-以编程方式发现存储过程的返回值_C#_Sql Server_Tsql_Information Schema - Fatal编程技术网

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

C# SQL Server-以编程方式发现存储过程的返回值,c#,sql-server,tsql,information-schema,C#,Sql Server,Tsql,Information Schema,这是一个元问题。如何使用每个数据库提供的信息_模式发现存储过程的返回值?对于函数,返回值被显式声明并显示在例程下的信息_模式中 然而,存储过程似乎是一个奇怪的灰色区域,SP和函数之间的区别总是如此。它们似乎没有正式的“返回值”,但最后您可以运行SELECT语句,例如: SELECT RowID = @RowID; 比如,;在C中,从列“RowID”读取返回值。这表明存储过程实际上能够返回值,尽管不像函数那样在T-SQL代码的上下文中 如何在不解析定义本身的情况下发现这些值及其类型 编辑 如果您

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

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

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