使用此代码:
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
为什么?
答案 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)
您需要使用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