sp_executesql输出参数值不正确

时间:2015-05-07 12:30:18

标签: sql-server entity-framework-6

我通过以下两个查询获得了不同的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

1 个答案:

答案 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