Come posso eseguire una stored procedure in un'altra stored procedure nel server SQL? Come passare i parametri della seconda procedura?Eseguire una stored procedure in un'altra stored procedure nel server SQL
risposta
È possibile richiamare le funzioni definite dall'utente in una stored procedure alternativamente
questo potrebbe risolvere il tuo problema per chiamare stored procedure
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
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.
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
Sì, questo è posible, ma prima è necessario memorizzare questo ID in una variabile e quindi passare lo stesso a seconda sp. Vedi risposta aggiornata. –
I passaggi precedenti hanno funzionato.tanx. Come posso ottenere il valore di uscita della seconda Sp dalla prima ..? – Roys
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
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;
...
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
Avete intenzione di farlo in C# o come StoredProc sul server stesso? – MethodMan
usa la parola chiave 'exec'. – Matthew
Ho bisogno di eseguire nel Server stesso – Roys