1

我知道写作:

    SELECT * FROM <ANY TABLE>

在存储过程中会输出一个结果集......为什么我们在存储过程中单独有一个返回值?我们在哪里使用它?如果出现任何错误,那么结果集将是空仪式吗?

4

4 回答 4

1

首先,您有两种不同的退货方式。您可以返回一个结果(即一个表)作为操作的结果以及指示某种错误或结果集状态的返回值。

此外,返回值仅限于单个 32 位整数,而结果集可以具有 RDBMS 允许的尽可能多的行和列。

我个人的看法是主要使用存储过程来执行任务,而不是创建结果集。但这是一个品味问题。然而,使用这种范式,一个动作应该通知调用者成功和 - 在失败的情况下 - 关于原因。一些 RDBMS 允许使用异常,但如果没有什么可抛出的,即只返回一个状态(例如,0,1,2 表示 '数据是新的并且必须插入,数据存在并已更新,数据无法更新等。 )

还有第三种方式将信息传回给调用者:使用output参数。因此,您可以将信息传递回调用者的三种不同可能性。

这比“普通”编程语言多一个。他们通常可以选择返回一个值(例如int Foo(),或者一个输出/引用参数void Foo(ref int bar))。但是 SQL 引入了一种新的、非常强大的返回数据(即表)的方式。

事实上,您可能会返回多个表格,这使得此功能更加强大。

于 2013-11-12T06:58:04.623 回答
0

因为如果您使用返回值,您可以对执行状态和错误(如果有)有更细粒度的控制,并且您可以为格式错误或无效的参数等返回不同的错误代码,从而在调用中添加错误控制/检查一边到。

如果您只是检查一个空的结果集,您真的不知道为什么该集可能是空的(也许您使用无效参数调用了该过程)。

结果集和返回值之间的主要区别在于,结果集存储了返回的数据(如果有的话),而返回代码保存了某种关于执行本身的状态信息。

于 2013-11-12T06:47:15.490 回答
0

您可以使用返回值从存储过程返回附加信息。这可以是错误代码、验证结果或您可能想要返回的任何其他自定义信息。它在编码存储过程时为您提供了额外的灵活性。

于 2013-11-12T06:52:05.323 回答
0

为什么我们在存储过程中单独有一个返回值?

存储过程可能会返回 0 个或多个结果集。插入、更新和删除通常不会产生结果集,并且存储过程可能会调用select多次。在所有情况下,结果集都是data

我建议将“返回值”视为状态信息的最佳方式:它指示存储过程的工作方式。你可以返回@@rowcount一个update. 有时它可能很简单,例如满足某些标准的行数,从而节省您将变量绑定到单行以获得相同答案的工作。或者您可以返回 0 表示成功,返回非零表示错误;内联检查返回状态通常比在错误处理程序中更容易。

Unix cat实用程序的类比可能会有所帮助:它在标准输出上生成数据,并返回退出状态以让调用者知道它是否成功。

于 2016-06-29T00:17:39.477 回答