带或不带输出参数的SQL Server存储过程

时间:2016-09-01 00:07:24

标签: sql-server

我还在学习SQL,无法理解这两者之间的区别如下:

方法#1:

create proc sp_test1
    @count int out,
    @SalePrice int
as
begin 
   SELECT @Count = COUNT(*) 
   FROM dbo.SalesHistory 
   WHERE SalePrice = @SalePrice;
end

declare @Count int;

exec sp_test1 @SalePrice = '967', @Count = @Count output;

select @Count;

方法#2:

create proc sp_test2
    @SalePrice int
as
begin 
    SELECT COUNT(*) 
    FROM dbo.SalesHistory 
    WHERE SalePrice = @SalePrice;
end

exec sp_test2 @SalePrice = '967';

两者都应该返回一个数字。但是这两者有什么区别?在什么情况下我每个都使用?谢谢你们!

2 个答案:

答案 0 :(得分:1)

在这种情况下,没有实际的区别,没有真正的理由去做额外的工作来创建输出参数。

输出参数有用的示例是数据集从存储过程返回的情况,但您还需要一条适用于整个集合的信息....例如,也许您想要SQL Server执行查询的确切时间。或者也许有很多这样的项目。您可以将它们作为单独的“SELECT ...”数据集返回,但这可能很混乱,并且在应用程序代码中不能清楚地返回什么。不是命名输出参数,而是只有索引表。因此,这将是考虑使用输出参数的合理位置。

永远不需要输出参数,但它们可以是将标量数据返回给调用应用程序的不错选项。

答案 1 :(得分:0)

两个程序都很相似,但应用程序可能有所不同,例如假设您正在创建一个网页并且有一个网格。当我们放置网格时,我们通常会分页数据集,最终用户需要知道其中有多少个寻呼机。在这种情况下,您可以使用第二个实现。

第一步实现非常简单,你只是从数据库中选择一个数据集。

最后我想强调输出参数是可选的。