2013-04-04 14 views

Antwort

0

Sie können

abwechselnd Benutzerdefinierte Funktionen in einer gespeicherten Prozedur nennen dies Ihr Problem lösen kann

2

gespeicherte Prozedur Ja zu rufen, Sie, dass wie dies tun können:

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

    INSERT @Results 

    EXEC Procedure2 [parameters]; 
    SET @total 1; 

END 
SELECT @total 
36

Wenn Sie möchten nur bestimmte Operationen mit Ihrem zweiten SP ausführen und benötigen keine Werte zurück vom SP. Geben Sie einfach Folgendes ein:

Exec secondSPName @anyparams 

Andernfalls, wenn Sie Werte benötigen, die von Ihrem zweiten SP in Ihrem ersten SP zurückgegeben werden, erstellen Sie eine temporäre Tabellenvariable mit der gleichen Anzahl von Spalten und mit derselben Definition der Spaltenrückkehr um den zweiten SP. Dann können Sie diese Werte in der ersten SP als erhalten:

Insert into @tep_table 
Exec secondSPName @anyparams 

Update:

Um Parameter zweite sp zu passieren, dies zu tun:

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

Exec secondSPName @id 

Update 2:

Angenommen, Ihre zweite SP gibt Id und Name, wo Typ von id ist int und name ist von varchar(64) Typ.

jetzt, wenn Sie diese Werte in erster sp auswählen möchten erstellen Sie dann eine temporäre table Variable und Einsatz Werte hinein:

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

Select * From @tep_table 

Dadurch kehren Sie die von der zweiten SP zurückgegebenen Werte.

Hoffe, das ist klar, alle Ihre Zweifel.

+0

tanx .. ya ich brauchen Werte, die von der zweiten SP innerhalb der ersten zurückgegeben werden. bt der Parameter, den ich übergeben muss, ist eine Ausgabe der ersten Prozedur. ist es möglich.? Bitte sehen Sie dieses Beispiel. SP1 ID aus Tabelle_1 auswählen. Ist es möglich, diese ID als Parameter der zweiten Prozedur zu übergeben? – Roys

+0

Ja, das ist möglich, aber zuerst müssen Sie diese ID in einer Variablen speichern und dann an die zweite SP übergeben. Siehe aktualisierte Antwort. –

+0

Die obigen Schritte arbeiteten.tanx. Wie kann ich den Ausgabewert der zweiten Sp von der ersten bekommen ..? – Roys

4

Angenommen, Sie eine gespeicherte Prozedur wie diese haben

Erste gespeicherte Prozedur:

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 

Jetzt wollen Sie von einem anderen gespeicherten Prozedur diese Prozedur aufrufen wie wie unten

Zweite gespeicherte Prozedur

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 

Wie Sie oben gesehen haben, können wir cal l eine gespeicherte Prozedur aus einem anderen

0

Ihre sp_test: Return 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 

In Ihrem 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

Ja, Es ist einfach zu, wie wir die Funktion im Laden anrufen Verfahren.

für z.B. create user define Altersfunktion und Verwendung in select query.

select dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) as Age,R.DateOfBirth,r.RegistrationDate from T_Registration R 
Verwandte Themen