sp_executesql 输出参数值不正确

sp_executesql output parameter incorrect value

我从两个查询中得到不同的 outputParam 结果。第一个由 entity framework 生成,它为 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

原因是你在使用sp_executesql调用过程时缺少output

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

您的直接过程调用是正确的,这就是为什么它 return 是正确的值。如果你在没有 output 的情况下调用你的过程,它也会 return 0

exec [dbo].[usp_GetOrders] @order_date='2015-05-07 12:37:14.579',@output_param=@p2