存储过程返回值

时间:2010-12-20 11:21:34

标签: sql-server stored-procedures

使用此代码:

ALTER PROCEDURE [dbo].[get](@i int)
AS
BEGIN
    declare @ADate datetime
    select @ADate = ADate 
    from table
    where i=@i
    and DateDiff(day ,getDate(), aDate  ) > 0
    and aDate is not null
    order by aDate asc
    return select @ADAte   
END

返回0(或系统0日期时间,这不是数据库的预期结果)。

执行代码

Declare @res datetime

exec @res = get 3

print @res

为什么?

4 个答案:

答案 0 :(得分:9)

SQL Server中的存储过程只能返回整数。如果你需要返回除一个整数之外的任何东西,那么你应该使用这些方法之一(一些由前面的答案解释):

  • 在您的程序中使用SELECT

  • 使用OUTPUT参数

  • 使用用户定义的功能

答案 1 :(得分:7)

无需声明变量并为其赋值。只需返回select语句。

ALTER PROCEDURE [dbo].[get](@i int)
AS
BEGIN

    select ADate 
    from table
    where i=@i
    and DateDiff(day ,getDate(), aDate  ) > 0
    and aDate is not null
    order by aDate asc

END

虽然您应该知道,根据您的数据,这可能会返回多个值。

修改

如果你愿意,你可以这样做:

ALTER PROCEDURE [dbo].[get](@i int, @date datetime output)
AS
BEGIN

    select @date = ADate 
    from table
    where i=@i
    and DateDiff(day ,getDate(), aDate  ) > 0
    and aDate is not null
    order by aDate asc

END

然后你可以这样使用它:

Declare @res datetime

exec get 3, @res

print @res

答案 2 :(得分:1)

您应该选择值:

select @OADate

您的值将是第一个结果集第一行中的第一个值。

答案 3 :(得分:0)

查看CREATE PROCEDURE

您需要使用OUTPUT子句

**OUTPUT**

Indicates that the parameter is a return parameter. The value of this option can be returned to EXEC[UTE]. Use OUTPUT parameters to return information to the calling procedure.

此外,返回单个值似乎需要USER DEFINED SCALAR FUNCTION,而不是STORED PROCEDURE