SQL存储过程执行返回值0问题:如何设置自定义返回值?
自定义SQL Server存储过程返回值的解决方案
嘿,我来帮你搞定这个问题!你说的没错,SQL Server存储过程默认执行成功会返回0,但我们完全可以自定义这个返回值,甚至返回更多类型的结果。下面分两种常见场景给你具体的修改方案:
一、用RETURN语句返回整数值(适合状态码、结果行数这类整数型返回值)
如果你的需求是返回一个整数(比如查询到的项目数量、自定义的状态码),可以直接在存储过程末尾添加RETURN语句。这里以返回查询结果的行数为例,修改你的存储过程:
USE [Active] GO /****** Object: StoredProcedure [dbo].[PS_BR_listeProjetUneEntreprise] Script Date: 11/04/2018 13:39:10 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: BR -- Create date: 11/04/2018 -- Description: 返回指定企业的项目列表,并返回结果行数作为自定义返回值 -- ============================================= ALTER PROCEDURE [dbo].[PS_BR_listeProjetUneEntreprise] -- 请根据你的实际需求添加存储过程参数,比如企业ID @EntrepriseID INT AS BEGIN SET NOCOUNT ON; -- 关闭默认的影响行数提示,避免干扰返回值 -- 执行你的核心查询,获取项目列表 SELECT * FROM VotreTableProjet WHERE EntrepriseID = @EntrepriseID; -- 替换成你的实际表和条件 -- 统计查询返回的行数 DECLARE @ResultRowCount INT; SET @ResultRowCount = @@ROWCOUNT; -- 返回自定义的整数值(这里是结果行数) RETURN @ResultRowCount; END GO
调用方式(获取返回值):
DECLARE @CustomReturnValue INT; -- 执行存储过程并接收返回值 EXEC @CustomReturnValue = [dbo].[PS_BR_listeProjetUneEntreprise] @EntrepriseID = 123; -- 替换成你的实际参数值 -- 查看自定义返回值 SELECT @CustomReturnValue AS '自定义返回值';
二、用输出参数返回非整数/多值(适合返回字符串、多个结果的场景)
如果需要返回字符串描述、或者同时返回多个值,推荐使用输出参数。比如返回查询结果的状态描述:
USE [Active] GO /****** Object: StoredProcedure [dbo].[PS_BR_listeProjetUneEntreprise] Script Date: 11/04/2018 13:39:10 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: BR -- Create date: 11/04/2018 -- Description: 返回指定企业的项目列表,并通过输出参数返回状态信息 -- ============================================= ALTER PROCEDURE [dbo].[PS_BR_listeProjetUneEntreprise] @EntrepriseID INT, @StatusMessage VARCHAR(100) OUTPUT -- 定义输出参数 AS BEGIN SET NOCOUNT ON; -- 执行查询 SELECT * FROM VotreTableProjet WHERE EntrepriseID = @EntrepriseID; DECLARE @RowCount INT = @@ROWCOUNT; -- 根据结果设置输出参数的值 IF @RowCount > 0 SET @StatusMessage = '成功获取 ' + CAST(@RowCount AS VARCHAR) + ' 个项目'; ELSE SET @StatusMessage = '未找到该企业的任何项目'; END GO
调用方式(获取输出参数):
DECLARE @OutputMsg VARCHAR(100); -- 执行存储过程并传入输出参数 EXEC [dbo].[PS_BR_listeProjetUneEntreprise] @EntrepriseID = 123, @StatusMessage = @OutputMsg OUTPUT; -- 查看返回的状态信息 SELECT @OutputMsg AS '自定义返回信息';
注意事项
- 如果是修改已存在的存储过程,用
ALTER PROCEDURE;如果是新建,用CREATE PROCEDURE。 SET NOCOUNT ON是个好习惯,它会关闭SQL Server默认返回的“影响行数”消息,避免客户端混淆这个数值和你的自定义返回值。RETURN语句只能返回整数,如果你需要返回其他类型(比如字符串、日期),一定要用输出参数。
内容的提问来源于stack exchange,提问作者Romain
相关产品推荐
相关产品推荐

