SQL 存储过程中的输出参数

如何在 SQL Server 存储过程中使用输出参数?或者如何使用输出参数从存储过程中返回值或消息,并附带示例。

要从存储过程中输出值,您必须声明一个带有 OUT 或 OUTPUT 关键字的变量。在此存储过程输出参数演示中,我们将使用下表。

Source table 1

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
Output Parameters in SQL Stored Procedure 3

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
Print Message after query execution 5

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 Parameters in Stored Procedure 7

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

Remove OUTPUT keyword 8

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