Bir çıktı parametresi ile saklı yordam yürütmek?


197

Test etmeye çalıştığım saklı bir prosedür var. SQL Management Studio ile test etmeye çalışıyorum. Bu testi yapmak için giriyorum ...

exec my_stored_procedure 'param1Value', 'param2Value'

Son parametre bir output parameter. Ancak, bir saklı yordamın çıkış parametreleri ile sınamak nasıl bilmiyorum.

Bir saklı yordamı bir çıktı parametresiyle nasıl çalıştırabilirim?

Yanıtlar:


226

Kolay yolu etmektir right-clicküzerinde procedurede SQL Server Management Studio , (SSMS)

seçmek execute stored procedure...

ve istendiği gibi giriş parametreleri için değerler ekleyin .

SSMSdaha sonra proc'u yeni bir sorgu penceresinde çalıştırmak için kodu oluşturur ve sizin için yürütür. Nasıl yapıldığını görmek için oluşturulan kodu inceleyebilirsiniz.


2
Saklı yordamı yürütmek için tüm diğer olası yolları biliyorum (EXEC gibi, C # veya PHP'den çağrı) ama bu en kolay ve teknik olmayan bir kişi bunu yapabilir. bunun için +1 ve bilgileri paylaşmak için thx.
Dhaval

Bir komutum yok execute, bağlam menüsü sadece bir modify.
Akbari

Bu tuhaf görünüyor. Saklı yordamdaki bağlam menümde değiştirme, yürütme, özellikler ve diğerleri dahil yaklaşık bir düzine öğe var
Ray

2
Bence Jaider'in cevabı bu cevabı tamamlıyor çünkü ben fare çözümüyle değil yazılı komutla ilgileneceğim.
Alwyn Schoeman

SSMS kullanarak biraz farklı bir yol: SP'yi sağ tıklatın, "Komut Dosyası Saklı Yordamı" seçeneğini tıklatın, ardından "YÜRÜT" seçeneğini tıklatın. Bu size TSQL'i gösterecektir.
John Gilmer

169

Bunu yapabilirsiniz :

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

7
Sonunda 'ÇIKTI' demiyordum. Her zaman aptalca bir şey, teşekkürler!
Milne

SSMS'de diyalogları olabildiğince açmaktan kaçınmayı seviyorum, bu yüzden bu mükemmeldi.
ahwm

89

Prosedürden val iadesi

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

Prosedür tanımlamasında ilk iki parametrenin giriş parametreleri, üçüncüsünün de Çıkış parametresi olduğunu kontrol edin.

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

30

Gönderen http://support.microsoft.com/kb/262499

Misal:

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

Bu yardımcı olur umarım!


26

Prosedür Örneği:

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

Bu prosedür nasıl çağrılır

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

18

İlk olarak, çıktı değişkenini bildirin:

DECLARE @MyOutputParameter INT;

Ardından, saklı yordamı yürütün ve bunu parametrenin adları olmadan yapabilirsiniz, örneğin:

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT

veya parametre isimleriyle:

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

Ve son olarak, aşağıdakileri yaparak çıktı sonucunu görebilirsiniz SELECT:

SELECT @MyOutputParameter 

4
bu seçilen cevap
olmalıydı

9

Buna ne dersin? Son derece basitleştirilmiş:

  1. Aşağıdaki SPROC'un çıkış parametresi @ParentProductID

  2. Biz çıkışında değerini seçmek istediğiniz @ParentProductIDINTO @MyParentProductIDaşağıda bildirildi.

  3. Kod İşte:

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

7

> Bunu, çoklu çıkış parametresi için iyi çalıştığını deneyin:

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

Bu sorgu ile herhangi bir saklı yordamı yürütebilirsiniz (Çıktı parametresi ile veya Çıktı parametresi olmadan):

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

Burada @temp veri türü SP içindeki @ parametre3 ile aynı olmalıdır.

Bu yardımcı olur umarım..


Bu bana yardımcı oldu. Teşekkür ederim. Önce değişkeni bildirmeyi düşünmemiştim. Sadece bir sözdizimi örneği görmek gerekiyordu. Bu oydu.
Steven Johnson

1

İşte saklı yordam

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

Ve prosedürü yürütmenin yolu

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

1

Saklı bir yordamı uygulayarak çıktı değişkeni değerini almak için lütfen aşağıdaki örneği kontrol edin.

    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 çıktı parametresi kullanıyorum ve daha sonra ben sonuç kümesinde bu değerleri kullandım.

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.