我通过以下两个查询获得了不同的outputParam结果。第一个是由实体框架生成的,它为outputParam提供0。第二个结果是5。
declare @p2 int
set @p2=0
exec sp_executesql N'usp_GetOrders @order_date, @output_param',N'@order_date datetime,@output_param int output',@order_date='2015-05-07 12:37:14.579',@output_param=@p2 output
select @p2 AS outputParam
declare @p2 int
set @p2=0
exec [dbo].[usp_GetOrders] @order_date='2015-05-07 12:37:14.579',@output_param=@p2 output
select @p2 AS outputParam
程序看起来像这样
CREATE PROCEDURE [dbo].[usp_GetOrders]
@order_date AS datetime,
@output_param AS int OUTPUT
AS
BEGIN
SELECT @output_param=5
SELECT o.Id
FROM dbo.[Order] o
WHERE OrderDate > @order_date
END
答案 0 :(得分:1)
原因是您在使用output
调用该过程时遗漏了sp_executesql
。
exec sp_executesql N'usp_GetOrders @order_date, @output_param output',N'@order_date datetime,@output_param int output',@order_date='2015-05-07 12:37:14.579',@output_param=@p2 output
您的直接过程调用是正确的,它返回正确值的原因是什么。如果您在没有output
的情况下致电您的程序,它也会返回0
。
exec [dbo].[usp_GetOrders] @order_date='2015-05-07 12:37:14.579',@output_param=@p2