【问题标题】:How To Declare Input-Output Parameters In SQL Server Stored Procedure/Function?如何在 SQL Server 存储过程/函数中声明输入输出参数?
【发布时间】:2018-08-14 05:37:21
【问题描述】:

在甲骨文中,

我们可以像下面这样声明一个输入-输出参数(不仅仅是输入输出):

Create Or Replace Procedure USERTEST.SimpleInOutProcedure(
    p_InputInt Int,
    p_OutputInt out Int,
    p_InputOutputInt in out Int
) AS
BEGIN
    p_OutputInt := p_InputInt + 1;
    p_InputOutputInt := p_InputOutputInt + p_InputOutputInt;
END;

但是,当我尝试在 SQL Server 中声明时,脚本无法编译:

create procedure SimpleInOutProcedure 
    @p_InputInt int, @p_OutputInt int input output
As
Begin
    Select * from TestTableCommonA;
End

“输入”一词不是预期的,因此在 SQL Server Management Studio 中不是蓝色的:

我的脚本有什么问题,如何在 SQL Server 存储过程/函数中声明输入输出参数?

我想这样做是因为我需要为 SQL Server DB 创建“等效”读取器,该读取器以前是为 Oracle DB 创建的,并且具有输入/输出参数的读取器。

【问题讨论】:

    标签: sql sql-server oracle function stored-procedures


    【解决方案1】:

    这是 SQL 输入和输出参数的示例代码。

    CREATE PROCEDURE [dbo].[sample_Insert]
    @name varchar(500),
    @entryby int,
    @RetVal INT = 0 OUT
    
    AS
    
    SET NOCOUNT ON
    
    
    
    INSERT INTO dbo.Master
            ( name ,
              entry_date ,
              entry_by
            )
    VALUES  ( @name , -- service_name - varchar(1000)
              dbo.GetActDate() , -- entry_date - datetime
              @entryby  -- entry_by - int
            )
    
    
    
    
    IF @@ERROR =  0
    BEGIN
    SET @RetVal = 1 -- 1 IS FOR SUCCESSFULLY EXECUTED
    End
    ELSE
    BEGIN
    SET @RetVal = 0 -- 0 WHEN AN ERROR HAS OCCURED
    End
    
     set ANSI_NULLS ON
     set QUOTED_IDENTIFIER ON
    

    【讨论】:

    • 感谢您的示例!不过这并没有多大帮助,因为我想知道的是 SQL Server 中是否有等效的输入输出
    【解决方案2】:

    如果您将参数声明为 OUTPUT,则它同时充当 Input 和 OUTPUT

    CREATE PROCEDURE SimpleInOutProcedure 
    (
        @p_InputInt  INT,
        @p_OutputInt INT OUTPUT
    )
    AS
    BEGIN
        SELECT 
           @p_OutputInt = @p_OutputInt
    END
    GO
    
    DECLARE @p_OutputInt int = 4
    EXEC SimpleInOutProcedure @p_InputInt = 1, @p_OutputInt = @p_OutputInt OUTPUT
    SELECT @p_OutputInt
    

    【讨论】:

    • 这也是我怀疑的......但是,是否有任何关于此的明确文档?因为我找不到关于此的明确文档,因为只要有可能,我不想错过任何等价物,尤其是在 both 输入-输出行为部分。 (虽然我不知道它会作为输入和输出,但我认为它会是要么输入或输出)。
    • 我没有任何文档。但这看起来不需要详细的文档
    • 好的,让我测试一下你的脚本
    • 是的,@p_OutputInt 似乎既充当输入又充当输出。谢谢!
    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多