存储过程中的需要返回参数

时间:2014-01-31 13:45:57

标签: sql-server tsql stored-procedures

带有返回参数的SP定义

if OBJECT_ID('CountSeatleEmployee') is not null
drop proc CountSeatleEmployee

go

CREATE PROC CountSeatleEmployee
AS 
DECLARE @Total int
SELECT @Total =Count(*) 
from [AdventureWorks2012].[Person].[Person] P
WHERE P.EMAILPROMOTION =0
RETURN @Total

--Execute SP
declare @Count int
exec @Count = CountSeatleEmployee
SELECT @COUNT
--11158 Records

--same SP without Return Parameter

if OBJECT_ID('CountSeatleEmployee') is not null
drop proc CountSeatleEmployee
go
CREATE PROC CountSeatleEmployee
AS 
SELECT Count(*) 
from [AdventureWorks2012].[Person].[Person] P
WHERE P.EMAILPROMOTION =0

exec CountSeatleEmployee'

现在为什么不简单地使用下面。这两个提供相同的输出。为什么我们播种返回参数

2 个答案:

答案 0 :(得分:1)

根据我的经验,返回值通常用于错误条件。不是每个人都有相同的经历。

RETURN语句仅限于返回一个整数,因此它的用处有限(在我看来)。我更喜欢第二种方法,因为它允许代码更加一致。想象一下,你想要一个名字而不是一个计数,你将无法使用return语句。

另一方面,有些人更喜欢第一种使用return语句的方法(只要有可能就这样做)。理由是它是一种优化技术。当您从前端调用第一个代码示例时,无需处理该过程,期望它将返回结果集。相反,它只是从数据库传回的单个4字节值。第二个示例需要在前端进行更多处理,因为过程可以返回各种事物。它可以返回多个结果集,每个结果集可以包含多个列和多个行。您的前端代码需要评估返回的数据,然后构建适当的结构来处理数据。这需要额外的CPU周期。

我不一定推荐一个,我只是想解释一下这个理由。

答案 1 :(得分:0)

单向提供返回变量中的信息,然后使用Select of the variable将另一个转换为记录集,另一个作为数据集或记录集。这取决于您要使用的应用程序。

if OBJECT_ID('CountSeatleEmployee') is not null
drop proc CountSeatleEmployee

go

CREATE PROC CountSeatleEmployee
AS 
DECLARE @Total int
SELECT @Total =Count(*) 
from [AdventureWorks2012].[Person].[Person] P
WHERE P.EMAILPROMOTION =0


Select * from [AdventureWorks2012].[Person].[Person] P
WHERE P.EMAILPROMOTION =0
RETURN @Total

--Execute SP
declare @Count int
exec @Count = CountSeatleEmployee   --This will return the recordset of the table and returns the total rows into the variable @Count
SELECT @COUNT