好像我的存储过程正在返回Integer

时间:2014-12-11 21:41:49

标签: sql-server stored-procedures

我最近完成了我的存储过程101,只是写了一个小存储过程,如下所示:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[SelectProUserByUsername]
    @userName varchar(300)
AS
BEGIN   
    SET NOCOUNT ON;   
    SELECT * from ProUser
END

出于某种原因,SSMS有理由相信我的返回类型是整数。应该在对象浏览器中我的存储过程返回整数Return integer

我不确定它为什么会这样做。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

SQL Server支持User-Defined FunctionsStored Procedures。函数将许多参数作为输入,并返回用户定义类型的单个值作为输出,而存储过程只是一组连接的SQL语句。它们可以通过输入和输出参数连接到程序的其余部分,或者它们可以简单地修改数据,生成结果集等,就像将Transact-SQL直接粘贴到查询中一样。

引用the Books Online article,存储过程可以:

  • 接受输入参数并以输出参数的形式将多个值返回给调用程序。
  • 包含在数据库中执行操作的编程语句。其中包括调用其他程序。
  • 将状态值返回给调用程序以指示成功或失败(以及失败的原因)。

最后一点是存储过程“返回整数”的意义,因为返回状态始终是整数值(默认值为0)。这是通过在存储过程中使用the RETURN statement来控制的。

例如,如果我像上面那样运行你的存储过程:

DECLARE @return_status int;
EXEC @return_status = SelectProUserByUsername 'IMSoP';
SELECT @return_status as status;

我会获得status 0的其他结果集;如果我在程序结束时添加RETURN 1,我会改为1

SSMS只是显示“返回类型”以与函数一致,但它总是存储过程的整数。

注意,在某些上下文中,整数返回函数和存储过程可以互换使用;例如,上面示例中的the EXECUTE/EXEC statement对任何“模块”(过程,函数等)使用相同的语法。