2009-10-19 54 views
138

我有一個存儲過程,我試圖測試。我試圖通過SQL Management Studio來測試它。爲了運行這個測試,我進入...使用Output參數執行存儲過程?

exec my_stored_procedure 'param1Value', 'param2Value' 

最後一個參數是一個output parameter。但是,我不知道如何用輸出參數測試存儲過程。

如何使用輸出參數運行存儲過程?

回答

173

最簡單的辦法是right-clickprocedureSQL Server管理套件(SSMS),

選擇execute stored procedure...

和提示輸入輸入添加參數值。

SSMS將生成代碼以在新的查詢窗口中運行proc併爲您執行。你可以研究生成的代碼,看看它是如何完成的。從程序

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

我知道要執行存儲過程(如EXEC,從C#或PHP調用)所有其他可能的方法,但這是最簡單的和非技術人員可以做到這一點。所以+1和thx共享信息。 – Dhaval 2013-09-03 11:13:02

+0

我沒有'execute'命令,上下文菜單隻有一個'modify'。 – Akbari 2015-06-08 05:25:12

+0

這似乎很奇怪。我在存儲過程中的上下文菜單有大約12個項目,包括修改,執行,屬性和其他項。 – Ray 2015-06-08 14:56:41

27

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, 
@[email protected], 
@[email protected] OUTPUT,@[email protected] OUTPUT 

SELECT @parmRET1 AS "parameter 1", @parmRET2 AS "parameter 2" 
GO 
DROP PROCEDURE Myproc 

希望這有助於!

122

你可以做到這一點。

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

我不是說'OUTPUT'結尾。總是有些愚蠢的,謝謝! – Milne 2015-09-18 15:25:34

+0

我喜歡儘可能避免在SSMS中打開對話框,所以這非常完美。 – ahwm 2015-09-22 16:12:48

65

返回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 
32

檢查這一點,如果前兩個參數是輸入參數和第三一個是過程定義輸出參數:

9

這個怎麼樣?這是非常簡單:

  1. 存儲過程的下面有@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'[email protected],'password'[email protected] 
9

步驟示例:

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].[text] 'Abhishek',@ID OUTPUT 
PRINT @ID 
+0

小評論:你稱之爲SP:[dbo]。[測試],但是當你稱之爲[dbo]。[文本]時,這恰好是一個錯字。請修復 – leeroya 2017-06-16 16:42:10

3
CREATE PROCEDURE DBO.MY_STORED_PROCEDURE 
(@PARAM1VALUE INT, 
@PARAM2VALUE INT, 
@OUTPARAM VARCHAR(20) OUT) 
AS 
BEGIN 
SELECT * FROM DBO.PARAMTABLENAME WHERE [email protected] 
END 

DECLARE @OUTPARAM2 VARCHAR(20) 
EXEC DBO.MY_STORED_PROCEDURE 1,@OUTPARAM2 OUT 
PRINT @OUTPARAM2 
4

首先,聲明輸出變量:

DECLARE @MyOutputParameter INT; 

然後,執行存儲過程,你可以做到這一點不帶參數的名字,就像這樣:

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT 

或參數的名字:

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

最後,您可以通過查看輸出結果的SELECT

SELECT @MyOutputParameter