在本文中,我们将深入探讨 SQL Server 存储过程中的返回值。在开始之前,建议阅读我们之前的文章,了解SQL Server 存储过程中的输出参数。
什么是 SQL Server 存储过程的返回值?
在 SQL Server 中,每当执行一个存储过程时,它总是返回一个整数状态变量,以指示状态,通常情况下,零表示成功,非零表示失败。要亲自查看这一点,可以在 SQL Server 管理工作室的对象资源管理器中执行任何存储过程。
执行步骤如下:
右键点击并选择执行存储过程。
如果存储过程需要参数,提供值并点击确定。
除了你期望的结果外,存储过程还会返回一个“返回值 = 0”。
通过这个过程,我们了解到,执行存储过程时,它会返回一个整数状态变量。接下来,我们将使用以下员工表来理解 SQL Server 中的存储过程输出参数和返回值。
-- 创建员工表
CREATE TABLE Employee (
ID INT PRIMARY KEY,
Name VARCHAR(50),
Gender VARCHAR(50),
DOB DATETIME,
DeptID INT
);
-- 使用测试数据填充员工表
INSERT INTO Employee VALUES
(1, '张三', '男', '1996-02-29 10:53:27.060', 1),
(2, '李四', '女', '1995-05-25 10:53:27.060', 2),
(3, '王五', '男', '1995-04-19 10:53:27.060', 2),
(4, '赵六', '女', '1996-03-17 10:53:27.060', 3),
(5, '孙七', '男', '1997-01-15 10:53:27.060', 1),
(6, '周八', '女', '1995-07-12 10:53:27.060', 2),
(7, '吴九', '男', '1998-08-22 10:53:27.060', 3),
(8, '郑十', '女', '1999-11-30 10:53:27.060', 1),
(9, '朱十一', '男', '2000-12-01 10:53:27.060', 2),
(10, '钱十二', '女', '2001-01-02 10:53:27.060', 3);
示例1: 使用输出参数统计员工总数
-- 创建存储过程
CREATE PROCEDURE spGetTotalCountOfEmployee1
@TotalCount INT OUTPUT
AS
BEGIN
SELECT @TotalCount = COUNT(ID) FROM Employee
END
-- 调用存储过程
DECLARE @EmployeeTotal INT
EXECUTE spGetTotalCountOfEmployee1 @EmployeeTotal OUTPUT
PRINT @EmployeeTotal

示例2: 使用返回状态统计员工总数
-- 创建存储过程
CREATE PROCEDURE spGetTotalCountOfEmployee2
AS
BEGIN
RETURN (SELECT COUNT(ID) FROM Employee)
END
-- 调用存储过程
DECLARE @EmployeeTotal INT
EXECUTE @EmployeeTotal = spGetTotalCountOfEmployee2
PRINT @EmployeeTotal

示例3: 使用输出参数根据员工ID获取员工姓名
-- 创建存储过程
CREATE PROCEDURE spGetEmployeeNameById1
@ID INT, @Name VARCHAR(30) OUTPUT
AS
BEGIN
SELECT @Name = Name FROM Employee WHERE ID = @ID
END
-- 调用存储过程
DECLARE @EmployeeName VARCHAR(30)
EXECUTE spGetEmployeeNameById1 3, @EmployeeName OUTPUT
PRINT @EmployeeName

示例4: 尝试使用返回状态获取员工姓名
-- 创建存储过程
CREATE PROCEDURE spGetEmployeeNameById2
@ID INT
AS
BEGIN
RETURN (SELECT Name FROM Employee WHERE ID = @ID)
END
-- 调用存储过程
DECLARE @EmployeeName VARCHAR(30)
EXECUTE @EmployeeName = spGetEmployeeNameById2 3
PRINT @EmployeeName
执行上述存储过程 spGetEmployeeNameById2
时,会返回错误:“转换失败,当尝试将 nvarchar 值 '王五' 转换为 int 类型时”。
SQL Server 中返回状态值的缺点
不能返回多个值。
只能返回整数类型的值。
而这些限制在输出参数中是可以被克服的。
返回状态值与输出参数的区别
希望本文能帮助您更好地理解 SQL Server 存储过程中的返回值和输出参数。
该文章在 2024/8/2 18:30:42 编辑过