Thực hiện thủ tục lưu trữ với một tham số đầu ra?


197

Tôi có một thủ tục lưu trữ mà tôi đang cố gắng kiểm tra. Tôi đang cố gắng kiểm tra nó thông qua SQL Management Studio. Để chạy thử nghiệm này, tôi nhập ...

exec my_stored_procedure 'param1Value', 'param2Value'

Tham số cuối cùng là một output parameter. Tuy nhiên, tôi không biết cách kiểm tra một thủ tục được lưu trữ với các tham số đầu ra.

Làm cách nào để chạy quy trình được lưu trữ với tham số đầu ra?

Câu trả lời:


225

Cách đơn giản là để right-clickvào proceduretrong Sql Server Management Studio (SSMS),

lựa chọn execute stored procedure...

và thêm các giá trị cho các tham số đầu vào như được nhắc.

SSMSsau đó sẽ tạo mã để chạy Proc trong cửa sổ truy vấn mới và thực thi nó cho bạn. Bạn có thể nghiên cứu mã được tạo để xem nó được thực hiện như thế nào.


2
Tôi biết tất cả các cách có thể khác để thực hiện thủ tục được lưu trữ (như EXEC, gọi từ C # hoặc PHP) nhưng đây là cách dễ nhất và một người không có kỹ thuật có thể làm điều này. vì vậy +1 cho điều này và thx để chia sẻ thông tin.
Dhaval

Tôi không có executelệnh, menu ngữ cảnh chỉ có một modify.
Akbari

Điều đó có vẻ kỳ lạ. Menu ngữ cảnh của tôi trên một thủ tục được lưu trữ có khoảng một tá các mục, bao gồm sửa đổi, thực thi, thuộc tính và các mục khác
Ray

2
Tôi nghĩ rằng câu trả lời của Jaider dưới đây đã hoàn thành câu trả lời này vì bản thân tôi sẽ quan tâm đến lệnh bằng văn bản chứ không phải giải pháp chuột.
Alwyn Schoeman

Một cách khác hơi khác khi sử dụng SSMS: nhấp chuột phải vào SP, nhấp vào "Thủ tục lưu trữ tập lệnh dưới dạng", sau đó nhấp vào "EXECUTE To". Điều này sẽ cho bạn thấy TSQL.
John Gilmer

167

bạn có thể làm được việc này :

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

7
Tôi đã không nói 'OUTPUT' vào cuối. Luôn luôn là một cái gì đó ngu ngốc, Cảm ơn!
Milne

Tôi muốn tránh các hộp thoại mở trong SSMS càng nhiều càng tốt để điều này là hoàn hảo.
ahwm

89

Trả lại val từ thủ tục

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 

42

Kiểm tra điều này, trong đó hai tham số đầu tiên là tham số đầu vào và thứ ba là tham số đầu ra trong định nghĩa thủ tục.

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

30

Từ http://support.microsoft.com/kb/262499

Thí dụ:

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

Hi vọng điêu nay co ich!


26

Ví dụ về thủ tục:

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

Cách gọi thủ tục này

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

18

Đầu tiên, khai báo biến đầu ra:

DECLARE @MyOutputParameter INT;

Sau đó, thực hiện thủ tục được lưu trữ và bạn có thể thực hiện nó mà không cần tên của tham số, như thế này:

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT

hoặc với tên của tham số:

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

Và cuối cùng, bạn có thể thấy kết quả đầu ra bằng cách thực hiện SELECT:

SELECT @MyOutputParameter 

4
đây nên là câu trả lời được chọn
anaval

9

Còn cái này thì sao? Nó cực kỳ đơn giản:

  1. XUÂN dưới đây có một tham số đầu ra là @ParentProductID

  2. Chúng tôi muốn chọn giá trị của sản lượng @ParentProductIDvào @MyParentProductIDđó được khai báo dưới đây.

  3. Đây là Mã:

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

7

> Hãy thử nó hoạt động tốt cho tham số nhiều đầu ra:

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

Với truy vấn này, bạn có thể thực hiện bất kỳ thủ tục được lưu trữ nào (Có hoặc không có tham số đầu ra):

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

Ở đây kiểu dữ liệu của @temp phải giống như @ tham số3 trong SP.

Hi vọng điêu nay co ich..


Điều này rất hữu ích với tôi. Cảm ơn bạn. Tôi đã không nghĩ đến việc khai báo biến đầu tiên. Chỉ cần xem một ví dụ cú pháp. Đây chính là nó.
Steven Johnson

1

Đây là thủ tục lưu trữ

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

Và đây là cách để thực hiện thủ tục

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

1

Vui lòng kiểm tra ví dụ dưới đây để có được giá trị biến đầu ra bằng cách thực hiện một thủ tục được lưu trữ.

    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

Tôi đang sử dụng tham số đầu ra trong SQL Proc và sau đó tôi đã sử dụng các giá trị này trong resultset.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.