【问题标题】:Execute stored procedure with an Output parameter?使用输出参数执行存储过程?
【发布时间】:2010-12-08 01:11:24
【问题描述】:

我有一个正在尝试测试的存储过程。我正在尝试通过 SQL Management Studio 对其进行测试。为了运行这个测试,我输入 ...

exec my_stored_procedure 'param1Value', 'param2Value'

最后一个参数是output parameter。但是,我不知道如何测试带有输出参数的存储过程。

如何运行带有输出参数的存储过程?

【问题讨论】:

    标签: sql-server stored-procedures


    【解决方案1】:

    来自http://support.microsoft.com/kb/262499

    例子:

    CREATE PROCEDURE Myproc
    
    @parm varchar(10),
    **@parm1OUT varchar(30) OUTPUT**,
    **@parm2OUT varchar(30) OUTPUT**
    AS
      SELECT @parm1OUT='parm 1' + @parm
     SELECT @parm2OUT='parm 2' + @parm
    
    GO
    
    DECLARE @SQLString NVARCHAR(500)
    DECLARE @ParmDefinition NVARCHAR(500)
    DECLARE @parmIN VARCHAR(10)
    DECLARE @parmRET1 VARCHAR(30)
    DECLARE @parmRET2 VARCHAR(30)
    
    SET @parmIN=' returned'
    SET @SQLString=N'EXEC Myproc @parm,
                             @parm1OUT OUTPUT, @parm2OUT OUTPUT'
    SET @ParmDefinition=N'@parm varchar(10),
                      @parm1OUT varchar(30) OUTPUT,
                      @parm2OUT varchar(30) OUTPUT'
    
    EXECUTE sp_executesql
    @SQLString,
    @ParmDefinition,
    @parm=@parmIN,
    @parm1OUT=@parmRET1 OUTPUT,@parm2OUT=@parmRET2 OUTPUT
    
    SELECT @parmRET1 AS "parameter 1", @parmRET2 AS "parameter 2"
    GO
    DROP PROCEDURE Myproc
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      简单的方法是在 Sql Server Management Studio(SSMS) 中的procedureright-click

      选择execute stored procedure...

      并根据提示为 输入 参数添加值。

      SSMS 然后将生成代码以在新的查询窗口中运行 proc,并为您执行它。您可以研究生成的代码,看看它是如何完成的。

      【讨论】:

      • 我知道执行存储过程的所有其他可能方式(如 EXEC ,从 C# 或 PHP 调用),但这是最简单的,非技术人员可以做到这一点。所以 +1 和 thx 分享信息。
      • 我没有execute 命令,上下文菜单只有一个modify
      • 这看起来很奇怪。我的存储过程上下文菜单有十几个项目,包括修改、执行、属性等
      • 我认为下面 Jaider 的回答完成了这个答案,因为我自己会对书面命令而不是鼠标解决方案感兴趣。
      • 使用 SSMS 的另一种稍微不同的方式:右键单击 SP,单击“将存储过程编写为”,然后单击“执行到”。这将显示 TSQL。
      【解决方案3】:

      你可以这样做:

      declare @rowCount int
      exec yourStoredProcedureName @outputparameterspOf = @rowCount output
      

      【讨论】:

        【解决方案4】:

        从过程中返回 val

        ALTER PROCEDURE testme @input  VARCHAR(10),
                               @output VARCHAR(20) output
        AS
          BEGIN
              IF @input >= '1'
                BEGIN
                    SET @output = 'i am back';
        
                    RETURN;
                END
          END
        
        DECLARE @get VARCHAR(20);
        
        EXEC testme
          '1',
          @get output
        
        SELECT @get 
        

        【讨论】:

          【解决方案5】:

          勾选此项,其中前两个参数是输入参数,第三个是过程定义中的输出参数。

          DECLARE @PK_Code INT;
          EXEC USP_Validate_Login  'ID', 'PWD', @PK_Code OUTPUT
          SELECT @PK_Code
          

          【讨论】:

            【解决方案6】:

            这个怎么样?它非常简化:

            1. 下面的SPROC有一个输出参数@ParentProductID

            2. 我们想将@ParentProductID 的输出值选择为@MyParentProductID,它在下面声明。

            3. 这是代码:

              declare @MyParentProductID int
              
              exec p_CheckSplitProduct @ProductId = 4077, @ParentProductID =  @MyParentProductID output
              
              select @MyParentProductID
              

            【讨论】:

              【解决方案7】:

              >试试这个它对多输出参数的工作正常:

              CREATE PROCEDURE [endicia].[credentialLookup]
              @accountNumber varchar(20),
              @login varchar(20) output,
              @password varchar(50) output
              AS
              BEGIN
              SET NOCOUNT ON;
              SELECT top 1 @login = [carrierLogin],@password = [carrierPassword]
                FROM [carrier_account] where carrierLogin = @accountNumber
                order by clientId, id
              END
              
              Try for the result: 
              SELECT *FROM [carrier_account] 
              DECLARE @login varchar(20),@password varchar(50)
              exec [endicia].[credentialLookup] '588251',@login OUTPUT,@password OUTPUT
              SELECT 'login'=@login,'password'=@password
              

              【讨论】:

                【解决方案8】:

                程序示例:

                Create Procedure [dbo].[test]
                @Name varchar(100),
                @ID int Output   
                As  
                Begin   
                SELECT @ID = UserID from tbl_UserMaster where  Name = @Name   
                Return;
                END     
                

                如何调用这个过程

                Declare @ID int    
                EXECUTE [dbo].[test] 'Abhishek',@ID OUTPUT   
                PRINT @ID
                

                【讨论】:

                  【解决方案9】:
                  CREATE PROCEDURE DBO.MY_STORED_PROCEDURE
                  (@PARAM1VALUE INT,
                  @PARAM2VALUE INT,
                  @OUTPARAM VARCHAR(20) OUT)
                  AS 
                  BEGIN
                  SELECT * FROM DBO.PARAMTABLENAME WHERE PARAM1VALUE=@PARAM1VALUE
                  END
                  
                  DECLARE @OUTPARAM2 VARCHAR(20)
                  EXEC DBO.MY_STORED_PROCEDURE 1,@OUTPARAM2 OUT
                  PRINT @OUTPARAM2
                  

                  【讨论】:

                    【解决方案10】:

                    首先,声明输出变量:

                    DECLARE @MyOutputParameter INT;
                    

                    然后,执行存储过程,你可以不带参数名,像这样:

                    EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT
                    

                    或使用参数名称:

                    EXEC my_stored_procedure @param1 = 'param1Value', @myoutput = @MyOutputParameter OUTPUT
                    

                    最后,您可以通过SELECT 看到输出结果:

                    SELECT @MyOutputParameter 
                    

                    【讨论】:

                    • 这应该是选择的答案
                    【解决方案11】:

                    这是存储过程

                    create procedure sp1
                    (
                    @id as int,
                    @name as nvarchar(20) out
                    )
                    as
                    begin
                    select @name=name from employee where id=@id
                    end
                    

                    这是执行过程的方法

                     declare @name1 nvarchar(10)
                        exec sp1 1,@name1 out
                        print @name1
                    

                    【讨论】:

                      【解决方案12】:

                      请查看以下示例,通过执行存储过程获取输出变量值。

                          DECLARE @return_value int,
                          @Ouput1 int,
                          @Ouput2 int,
                          @Ouput3 int
                      
                      EXEC    @return_value = 'Your Sp Name'
                              @Param1 = value1,
                              @Ouput1 = @Ouput1 OUTPUT,
                              @Ouput2 = @Ouput2 OUTPUT,
                              @Ouput3 = @Ouput3 OUTPUT
                      
                      SELECT  @Ouput1 as N'@Ouput1',
                              @Ouput2 as N'@Ouput2',
                              @Ouput3 as N'@Ouput3'
                      

                      【讨论】:

                        【解决方案13】:

                        我在 SQL Proc 中使用了输出参数,后来我在结果集中使用了这个值。

                        【讨论】:

                        • 你不应该把你的代码直接作为图像。
                        【解决方案14】:

                        使用此查询,您可以执行任何存储过程(带或不带输出参数):

                        DECLARE @temp varchar(100)  
                        EXEC my_sp
                            @parameter1 = 1, 
                            @parameter2 = 2, 
                            @parameter3 = @temp output, 
                            @parameter4 = 3, 
                            @parameter5 = 4
                        PRINT @temp
                        

                        这里@temp的数据类型应该与SP中的@parameter3相同。

                        希望这会有所帮助..

                        【讨论】:

                        • 这对我很有帮助。谢谢你。我没想过要先声明变量。只需要看一个语法示例。就是这样。
                        【解决方案15】:

                        这里是stored_proc的定义:

                        create proc product(@a int,@b int)
                        as
                        return @a * @b
                        

                        而且,这是从 Python 执行的: conn = pyodbc.connect('...') cursor = conn.cursor()

                        sql = """
                        SET NOCOUNT ON
                        declare @r float
                        exec @r=dbo.product 5,4
                        select @r
                        """
                        result = cursor.execute(sql)
                        print (result.fetchall())
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2014-03-30
                          • 2019-09-26
                          • 2016-03-24
                          相关资源
                          最近更新 更多