2013-04-04 13 views

Odpowiedz

0

Można zadzwonić Funkcje definiowane przez użytkownika w procedurze przechowywanej na przemian

może to rozwiązać problem zadzwonić procedura przechowywana

2

Tak, można to zrobić tak:

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

    INSERT @Results 

    EXEC Procedure2 [parameters]; 
    SET @total 1; 

END 
SELECT @total 
36

If chcesz wykonywać tylko niektóre operacje przez drugi SP i nie potrzebujesz wartości z powrotem do SP, po prostu wykonaj:

Exec secondSPName @anyparams 

Jeśli potrzebujesz wartości zwróconych przez twój drugi SP w pierwszym, następnie utwórz tymczasową zmienną tabeli z równą liczbą kolumn i taką samą definicją zwrotu kolumny przez drugie SP. Następnie można uzyskać te wartości w pierwszej SP jako:

Insert into @tep_table 
Exec secondSPName @anyparams 

Aktualizacja:

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

Exec secondSPName @id 

Aktualizacja 2::

Aby przekazać parametr do drugiego sp to zrobić

Załóżmy, że Twój drugi sp zwraca Id i Name, gdzie typ id to int i name jest typu varchar(64).

teraz, jeśli chcesz, aby wybrać tych wartości w pierwszej sp następnie utworzyć tymczasowy table wartości zmiennych i wstawić do niego:

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

Select * From @tep_table 

To spowoduje powrót wartości zwracanych przez drugą SP.

Mam nadzieję, że to rozwiąże wszelkie wątpliwości.

+0

tanx .. ya potrzebujemy wartości zwróconych przez drugi sp w pierwszym. bt parametr, który muszę przekazać, jest wynikiem pierwszej procedury. Czy to możliwe.? Pls zobacz ten przykład. SP1 Wybierz identyfikator z tabeli_1. czy można przekazać ten identyfikator jako parametr drugiej procedury? – Roys

+0

Tak, jest to możliwe, ale najpierw musisz zapisać ten identyfikator w zmiennej, a następnie przekazać to samo do drugiego sp. Zobacz zaktualizowaną odpowiedź. –

+0

Powyższe kroki worked.tanx. Jak mogę uzyskać wartość wyjściową drugiego Sp od pierwszego ..? – Roys

4

Załóżmy, że masz jedną procedurę przechowywaną jak ten

Pierwszej procedury przechowywanej:

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 

Teraz chcesz wywołać tej procedury od innej procedury przechowywanej jak poniżej

Druga procedura przechowywana

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 

Jak widać powyżej, możemy dokonać kalibracji l jeden procedury przechowywanej z innej

0

Twój sp_test: Powrót 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 

W swojej 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

Tak, Łatwo jest sposób nazywamy funkcję wewnątrz sklepu procedura.

np. create user define Funkcja Age i użyj w zapytaniu wyboru.

select dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) as Age,R.DateOfBirth,r.RegistrationDate from T_Registration R 
Powiązane problemy