存储过程返回数据的不同方式

时间:2018-08-22 12:38:11

标签: sql sql-server

我有以下存储过程:

CREATE PROCEDURE spGetSalaryInfo
    @AverageSalary INT OUT
AS
BEGIN
    SELECT MAX(1) MaxSalary;
    SELECT @AverageSalary = AVG(1);
    RETURN (SELECT COUNT(1) Total);
END 

执行查询时,得到3个结果集。来自SELECT语句的一个,来自OUTPUT参数的一个,以及来自RETURN语句的最后一个。

DECLARE @MaximumSalary INT, @AverageSalary INT, @TotalEmployee int;

EXEC @TotalEmployee = spGetSalaryInfo @AverageSalary OUT

SELECT @AverageSalary AS AVGERAGE
SELECT @TotalEmployee AS TotalEmployee

输出:

MaxSalary   AVGERAGE    TotalEmployee
----------- ----------- -------------
1           1           1

如您所见,我可以通过选择存储过程中的SELECT查询或OUTPUT参数以及return语句来返回数据。

我想知道,在什么情况下我们可以使用这种类型的存储过程。我有点困惑。

2 个答案:

答案 0 :(得分:2)

这是从存储过程中返回三个变量的一种奇怪方法,典型情况是选择返回所有三个作为输出参数,或者返回所有三个作为单行结果的列。

  

我想知道,在什么情况下我们可以使用这种类型的存储过程。我有点困惑。

在大多数情况下,一条select语句将返回一组数据(即一组列中有许多行的数据),但在某些情况下(看起来像一个)谨慎的值,而不是一组值。

答案 1 :(得分:-2)

你为什么不这样尝试

CREATE PROCEDURE spGetSalaryInfo
AS
BEGIN
    DECLARE 
         @TotalEmployee INT
        ,@MaxSalary INT

    SELECT @MaxSalary  = MAX(1)
    SELECT @AverageSalary = AVG(1)
    SELECT @TotalEmployee = COUNT(1)

    SELECT 
         @MaxSalary AS MaxSalary
        ,@AverageSalary AS AVGERAGE
        ,@TotalEmployee  AS TotalEmployee  
END