ดำเนินการขั้นตอนการจัดเก็บด้วยพารามิเตอร์ Output หรือไม่


197

ฉันมีขั้นตอนการจัดเก็บที่ฉันพยายามทดสอบ ฉันพยายามทดสอบผ่าน SQL Management Studio ในการใช้งานการทดสอบนี้ฉันเข้าร่วม ...

exec my_stored_procedure 'param1Value', 'param2Value'

output parameterพารามิเตอร์สุดท้ายเป็น อย่างไรก็ตามฉันไม่ทราบวิธีทดสอบโพรซีเดอร์ที่เก็บด้วยพารามิเตอร์เอาต์พุต

ฉันจะรันโพรซีเดอร์ที่เก็บด้วยพารามิเตอร์เอาต์พุตได้อย่างไร?

คำตอบ:


226

วิธีที่ง่ายคือไปright-clickที่procedureในSQL Server Studio จัดการ (SSMS)

เลือก execute stored procedure...

และเพิ่มค่าสำหรับพารามิเตอร์อินพุตตามพร้อมต์

SSMSจะสร้างรหัสเพื่อเรียกใช้ proc ในหน้าต่างแบบสอบถามใหม่และดำเนินการให้คุณ คุณสามารถศึกษารหัสที่สร้างขึ้นเพื่อดูว่ามันทำอย่างไร


2
ฉันรู้วิธีที่เป็นไปได้อื่น ๆ ทั้งหมดในการรันโพรซีเดอร์ที่เก็บไว้ (เช่น EXEC, การโทรจาก C # หรือ PHP) แต่นี่เป็นวิธีที่ง่ายที่สุดและไม่ใช่บุคคลทางเทคนิคสามารถทำได้ ดังนั้น +1 สำหรับสิ่งนี้และขอบคุณสำหรับการแบ่งปันข้อมูล
Dhaval

ฉันไม่ได้มีคำสั่งเมนูบริบทมีเพียงexecute modify
Akbari

ดูเหมือนว่าแปลก เมนูบริบทของฉันในการจัดเก็บมีประมาณโหลรายการรวมทั้งการปรับเปลี่ยนการดำเนินการ, คุณสมบัติและอื่น ๆ
เรย์

2
ฉันคิดว่าคำตอบของ Jaider ด้านล่างทำให้คำตอบนี้สมบูรณ์เพราะฉันเองจะสนใจคำสั่งที่เขียนเป็นลายลักษณ์อักษรไม่ใช่คำตอบของเม้าส์
Alwyn Schoeman

อีกวิธีที่แตกต่างกันเล็กน้อยโดยใช้ SSMS: คลิกขวาที่ SP คลิก "ขั้นตอนการจัดเก็บสคริปต์เป็น" จากนั้นคลิก "ดำเนินการถึง" นี่จะแสดง TSQL ให้คุณเห็น
John Gilmer

169

คุณสามารถทำสิ่งนี้:

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

7
ฉันไม่ได้พูดว่า 'เอาท์พุท' ในตอนท้าย ขอบคุณเสมอทุกสิ่งที่โง่!
Milne

ฉันชอบที่จะหลีกเลี่ยงการเปิดกล่องโต้ตอบใน SSMS ให้มากที่สุดเท่าที่จะทำได้
ahwm

89

ส่งคืน 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 

43

ตรวจสอบสิ่งนี้โดยที่พารามิเตอร์สองตัวแรกคือพารามิเตอร์อินพุตและตัวที่สามคือพารามิเตอร์เอาต์พุตในนิยามโพรซีเดอร์

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

30

จาก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

หวังว่านี่จะช่วยได้!


26

ตัวอย่างขั้นตอน:

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

18

ก่อนอื่นให้ประกาศตัวแปรเอาต์พุต:

DECLARE @MyOutputParameter INT;

จากนั้นดำเนินการขั้นตอนการจัดเก็บและคุณสามารถทำได้โดยไม่ต้องชื่อพารามิเตอร์เช่นนี้

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT

หรือด้วยชื่อพารามิเตอร์:

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

และในที่สุดคุณสามารถเห็นผลลัพธ์ผลลัพธ์โดยการทำSELECT:

SELECT @MyOutputParameter 

4
นี่น่าจะเป็นคำตอบที่เลือก
anaval

9

แล้วเรื่องนี้ล่ะ มันง่ายมาก:

  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

3
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

3

ด้วยแบบสอบถามนี้คุณสามารถดำเนินการขั้นตอนการจัดเก็บใด ๆ (มีหรือไม่มีพารามิเตอร์เอาท์พุท):

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

ประเภทข้อมูลที่นี่ของ @temp ควรเหมือนกับ @ parameter3 ภายใน SP

หวังว่านี่จะช่วย ..


สิ่งนี้มีประโยชน์สำหรับฉัน ขอบคุณ. ฉันไม่คิดว่าจะประกาศตัวแปรก่อน ต้องการเพียงเพื่อดูตัวอย่างไวยากรณ์ นี่มัน
สตีเวนจอห์นสัน

1

นี่คือขั้นตอนการจัดเก็บ

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

1

โปรดตรวจสอบตัวอย่างด้านล่างเพื่อรับค่าตัวแปรผลลัพธ์โดยดำเนินการตามขั้นตอนที่เก็บไว้

    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'

-1

ฉันใช้พารามิเตอร์เอาต์พุตใน SQL Proc และหลังจากนั้นฉันใช้ค่านี้ใน resultset

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.