将OUT参数传递给程序是不是很糟糕?

时间:2017-03-15 08:49:38

标签: c# sql-server

我使用OUT参数创建了一个过程,以便将主键插入表中。

CREATE PROCEDURE spProcedureName (
    @Name VARCHAR(20)
    ,@Place VARCHAR(20)
    ,@InsertedId INT = 0 OUT
    )
AS
BEGIN
    INSERT INTO TableName (
        NAME
        ,Place
        )
    VALUES (
        @Name
        ,@Place
        );

    SET @InsertedId = SCOPE_IDENTITY();
END;

此过程用于我的C#代码。我也从OUT参数中获取值。

但是,这是经过同行评审,并要求不要使用OUT参数。他告诉我改变程序如下。

CREATE PROCEDURE spProcedureName (
    @Name VARCHAR(20)
    ,@Place VARCHAR(20)
    )
AS
BEGIN

    DECLARE @InsertedId INT = 0;
    INSERT INTO TableName (
        NAME
        ,Place
        )
    VALUES (
        @Name
        ,@Place
        );

    SET @InsertedId = SCOPE_IDENTITY();

    SELECT @InsertedId;
END;

我想知道为什么使用OUT参数是不好的。请告诉我。我搜索但无法得到任何东西。

P.S:帖子中的程序只是一个样本。生成的ID在其他表中用作实际过程中的外键。

提前致谢。

1 个答案:

答案 0 :(得分:1)

返回参数中的标量值与结果集之间的区别纯粹是语义上的。

指导哪种使用方法的设计决策应主要由上下文驱动,但也应由风格和一致性驱动。如果存储过程已生成结果集,则具有返回参数可以是将标量值传递回应用程序的便捷方式。某些客户端应用程序或数据访问层可能不适合处理返回参数。了解客户端应用程序可能有助于整体设计。一致性也可能发挥作用。如果系统中的存储过程通常返回标量值的结果集,并且您的代码已经过优化,那么添加以不同方式返回数据的新存储过程可能不是一个优雅的解决方案,并且可能会增加复杂性。

总体而言,了解系统中的所有部分以及它们与存储过程的交互方式将导致最佳设计方法。