如何在 SQL Server 存储过程中使用输出参数?或者如何使用输出参数从存储过程中返回值或消息,并附带示例。
要从存储过程中输出值,您必须声明一个带有 OUT 或 OUTPUT 关键字的变量。在此存储过程输出参数演示中,我们将使用下表。

SQL 存储过程输出参数示例
在此示例中,我们将向您展示如何在存储过程中使用输出参数。请参阅《SQL Server 存储过程选择》文章,了解如何在存储过程中编写Select 语句。此外,请参阅《存储过程简介》文章,以了解SQL Server 存储过程的基础知识。
以下语句将创建名为 spEmployeeCount 的存储过程。并且我们声明了一个名为 @EmployeeCount 的整数类型变量,并带有 OUTPUT 关键字。在过程中,我们使用COUNT 来查找 Employee Duplicate 表中的员工数量。然后我们将值赋给输出参数。
CREATE PROCEDURE [dbo].[spEmployeeCount] @EmployeeCount INT OUTPUT AS BEGIN SELECT @EmployeeCount = COUNT(EmpID)FROM [EmployeeDuplicates] END
Messages
--------
Command(s) completed successfully.
让我执行存储过程。这里,我们需要传递输出参数 @EmployeeCount 参数。
-- Declare a Variable of Type Int. Should match with SP's Output parameter DECLARE @TotalEmployees INT -- Don't forget OUTPUT keyword EXEC [dbo].[spEmployeeCount] @TotalEmployees OUTPUT -- Printing the Output PRINT @TotalEmployees

SQL 存储过程输出参数示例 2
在此示例中,我们将向您解释如何在单个存储过程中使用输入参数和输出参数。请参阅《SQL 存储过程中的输入参数》文章,了解如何在存储过程中使用输入参数。
在此,我们声明一个名为 @LastName 的变量作为输入参数,并声明一个 Varchar 类型的 @EmployeeProfession 作为输出参数。在过程中,我们查找姓氏等于输入参数的员工的职业。接下来,我们将值赋给输出参数。
CREATE PROCEDURE [dbo].[spEmployeeProfession] @LastName VARCHAR(50), @EmployeeProfession VARCHAR(50) OUTPUT AS BEGIN SELECT @EmployeeProfession = [Occupation] FROM [EmployeeDuplicates] WHERE [LastName] = @LastName END
Messages
--------
Command(s) completed successfully.
让我执行存储过程。这里,我们需要为 @LastName 传递“Gateway”作为值。
DECLARE @Profession VARCHAR(50) EXEC [dbo].[spEmployeeProfession] N'Gateway', @Profession OUTPUT PRINT 'Gateway is Working in the ' + @Profession

SP 示例 3 输出参数
让我们看看如何使用 SQL 存储过程中的输出参数来返回多个输出。在此,我们声明一个名为 @LastName 的变量作为输入参数,并声明三个输出参数。在过程中,我们查找姓氏等于输入参数的员工的职业、教育程度和年收入。接下来,我们将值赋给输出参数。
CREATE PROCEDURE [dbo].[spEmployeeProf] @LastName VARCHAR(50), @Profession VARCHAR(50) OUTPUT, @Education VARCHAR(50) OUTPUT, @Income FLOAT OUTPUT AS BEGIN SELECT @Profession = [Occupation], @Education = Education, @Income = YearlyIncome FROM [EmployeeDuplicates] WHERE [LastName] = @LastName END
Messages
--------
Command(s) completed successfully.
让我执行存储过程。
-- Example
DECLARE @EmpProfession VARCHAR(50),
@EmpEducation VARCHAR(50),
@EmpIncome FLOAT
EXEC [dbo].[spEmployeeProf] N'Gateway', @EmpProfession OUTPUT,
@EmpEducation OUT,
@EmpIncome OUT
SELECT @EmpProfession AS Profession,
@EmpEducation AS Education,
@EmpIncome AS Income

让我向您展示,如果您遗漏了 OUTPUT 关键字会发生什么

从上面的截图可以看出,它返回了一个 NULL 值。所以,请不要忘记 OUTPUT 关键字。