2013-04-04 20 views

risposta

0

È possibile richiamare le funzioni definite dall'utente in una stored procedure alternativamente

questo potrebbe risolvere il tuo problema per chiamare stored procedure

2

Sì, si può fare in questo modo:

BEGIN 
    DECLARE @Results TABLE (Tid INT PRIMARY KEY); 

    INSERT @Results 

    EXEC Procedure2 [parameters]; 
    SET @total 1; 

END 
SELECT @total 
36

Se vuoi solo eseguire alcune operazioni specifiche dal tuo secondo SP e non richiedere i valori indietro dall'SP allora fai semplicemente:

Exec secondSPName @anyparams 

Altrimenti, se sono necessari valori restituiti dal secondo SP all'interno del primo, quindi creare una variabile di tabella temporanea con un numero uguale di colonne e con la stessa definizione di ritorno di colonna per secondo SP. Quindi è possibile ottenere questi valori nel primo SP come:

Insert into @tep_table 
Exec secondSPName @anyparams 

Aggiornamento:

Per passare parametri a seconda sp, fare questo:

Declare @id ID_Column_datatype 
Set @id=(Select id from table_1 Where yourconditions) 

Exec secondSPName @id 

Aggiornamento 2:

Supponi che il tuo secondo sp restituisca Id e Name dove tipo di id è int e name è di tipo varchar(64).

ora, se si desidera selezionare questi valori nel primo sp quindi creare un temporaneo table valori delle variabili e di inserimento in esso:

Declare @tep_table table 
(
    Id int, 
    Name varchar(64) 
) 
Insert into @tep_table 
Exec secondSP 

Select * From @tep_table 

Ciò restituirà i valori restituiti dalla seconda SP.

Spero, questo chiarisca tutti i tuoi dubbi.

+0

tanx .. ya i hanno bisogno di valori restituiti dal secondo sp all'interno del primo. bt il parametro che ho bisogno di passare è un output della prima procedura. È possibile.? Pls vede questo esempio. SP1 Selezionare id da table_1. è possibile passare questo id come parametro della seconda procedura? – Roys

+0

Sì, questo è posible, ma prima è necessario memorizzare questo ID in una variabile e quindi passare lo stesso a seconda sp. Vedi risposta aggiornata. –

+0

I passaggi precedenti hanno funzionato.tanx. Come posso ottenere il valore di uscita della seconda Sp dalla prima ..? – Roys

4

Supponiamo di avere una stored procedure come questo

Prima stored procedure:

Create PROCEDURE LoginId 
    @UserName nvarchar(200), 
    @Password nvarchar(200) 
AS 
BEGIN 
    DECLARE @loginID int 

    SELECT @loginID = LoginId 
    FROM UserLogin 
    WHERE UserName = @UserName AND Password = @Password 

    return @loginID 
END 

Ora che si desidera chiamare questa procedura da un'altra stored procedure come come di seguito

seconda stored procedure

Create PROCEDURE Emprecord 
     @UserName nvarchar(200), 
     @Password nvarchar(200), 
     @Email nvarchar(200), 
     @IsAdmin bit, 
     @EmpName nvarchar(200), 
     @EmpLastName nvarchar(200), 
     @EmpAddress nvarchar(200), 
     @EmpContactNo nvarchar(150), 
     @EmpCompanyName nvarchar(200) 

    AS 
    BEGIN 
     INSERT INTO UserLogin VALUES(@UserName,@Password,@Email,@IsAdmin) 

     DECLARE @EmpLoginid int 

     **exec @EmpLoginid= LoginId @UserName,@Password** 

     INSERT INTO tblEmployee VALUES(@EmpName,@EmpLastName,@EmpAddress,@EmpContactNo,@EmpCompanyName,@EmpLoginid) 
    END 

Come hai visto sopra, possiamo cal l una stored procedure da un'altra

0

tuo sp_test: ritorno Fullname

USE [MY_DB] 
GO 

IF (OBJECT_ID('[dbo].[sp_test]', 'P') IS NOT NULL) 
DROP PROCEDURE [dbo].sp_test; 
GO 

CREATE PROCEDURE [dbo].sp_test 
@name VARCHAR(20), 
@last_name VARCHAR(30), 
@full_name VARCHAR(50) OUTPUT 
AS 

SET @full_name = @name + @last_name; 

GO 

Nella tua sp_main

... 
DECLARE @my_name VARCHAR(20); 
DECLARE @my_last_name VARCHAR(30); 
DECLARE @my_full_name VARCHAR(50); 
... 

EXEC sp_test @my_name, @my_last_name, @my_full_name OUTPUT; 
... 
0

Sì, sua facile modo che noi chiamiamo la funzione all'interno del negozio procedura.

per es. creare un utente definire la funzione Età e utilizzare nella query selezionata.

select dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) as Age,R.DateOfBirth,r.RegistrationDate from T_Registration R 
Problemi correlati