我有以下存储过程:
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
语句来返回数据。
我想知道,在什么情况下我们可以使用这种类型的存储过程。我有点困惑。
答案 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