在本文中,我們將深入探討 SQL Server 存儲過程中的返回值。在開始之前,建議閱讀我們之前的文章,了解SQL Server 存儲過程中的輸出參數(shù)。
什么是 SQL Server 存儲過程的返回值?
在 SQL Server 中,每當(dāng)執(zhí)行一個(gè)存儲過程時(shí),它總是返回一個(gè)整數(shù)狀態(tài)變量,以指示狀態(tài),通常情況下,零表示成功,非零表示失敗。要親自查看這一點(diǎn),可以在 SQL Server 管理工作室的對象資源管理器中執(zhí)行任何存儲過程。
執(zhí)行步驟如下:
右鍵點(diǎn)擊并選擇執(zhí)行存儲過程。
如果存儲過程需要參數(shù),提供值并點(diǎn)擊確定。
除了你期望的結(jié)果外,存儲過程還會返回一個(gè)“返回值 = 0”。
通過這個(gè)過程,我們了解到,執(zhí)行存儲過程時(shí),它會返回一個(gè)整數(shù)狀態(tài)變量。接下來,我們將使用以下員工表來理解 SQL Server 中的存儲過程輸出參數(shù)和返回值。
-- 創(chuàng)建員工表
CREATE TABLE Employee (
ID INT PRIMARY KEY,
Name VARCHAR(50),
Gender VARCHAR(50),
DOB DATETIME,
DeptID INT
);
-- 使用測試數(shù)據(jù)填充員工表
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: 使用輸出參數(shù)統(tǒng)計(jì)員工總數(shù)
-- 創(chuàng)建存儲過程
CREATE PROCEDURE spGetTotalCountOfEmployee1
@TotalCount INT OUTPUT
AS
BEGIN
SELECT @TotalCount = COUNT(ID) FROM Employee
END
-- 調(diào)用存儲過程
DECLARE @EmployeeTotal INT
EXECUTE spGetTotalCountOfEmployee1 @EmployeeTotal OUTPUT
PRINT @EmployeeTotal

示例2: 使用返回狀態(tài)統(tǒng)計(jì)員工總數(shù)
-- 創(chuàng)建存儲過程
CREATE PROCEDURE spGetTotalCountOfEmployee2
AS
BEGIN
RETURN (SELECT COUNT(ID) FROM Employee)
END
-- 調(diào)用存儲過程
DECLARE @EmployeeTotal INT
EXECUTE @EmployeeTotal = spGetTotalCountOfEmployee2
PRINT @EmployeeTotal

示例3: 使用輸出參數(shù)根據(jù)員工ID獲取員工姓名
-- 創(chuàng)建存儲過程
CREATE PROCEDURE spGetEmployeeNameById1
@ID INT, @Name VARCHAR(30) OUTPUT
AS
BEGIN
SELECT @Name = Name FROM Employee WHERE ID = @ID
END
-- 調(diào)用存儲過程
DECLARE @EmployeeName VARCHAR(30)
EXECUTE spGetEmployeeNameById1 3, @EmployeeName OUTPUT
PRINT @EmployeeName

示例4: 嘗試使用返回狀態(tài)獲取員工姓名
-- 創(chuàng)建存儲過程
CREATE PROCEDURE spGetEmployeeNameById2
@ID INT
AS
BEGIN
RETURN (SELECT Name FROM Employee WHERE ID = @ID)
END
-- 調(diào)用存儲過程
DECLARE @EmployeeName VARCHAR(30)
EXECUTE @EmployeeName = spGetEmployeeNameById2 3
PRINT @EmployeeName
執(zhí)行上述存儲過程 spGetEmployeeNameById2
時(shí),會返回錯(cuò)誤:“轉(zhuǎn)換失敗,當(dāng)嘗試將 nvarchar 值 '王五' 轉(zhuǎn)換為 int 類型時(shí)”。
SQL Server 中返回狀態(tài)值的缺點(diǎn)
不能返回多個(gè)值。
只能返回整數(shù)類型的值。
而這些限制在輸出參數(shù)中是可以被克服的。
返回狀態(tài)值與輸出參數(shù)的區(qū)別
希望本文能幫助您更好地理解 SQL Server 存儲過程中的返回值和輸出參數(shù)。
該文章在 2024/8/2 18:30:42 編輯過