Comment puis-je exécuter une procédure stockée dans une autre procédure stockée dans SQL Server? Comment vais-je transmettre les paramètres de la deuxième procédure?
Si vous voulez seulement effectuer certaines opérations spécifiques à partir de votre seconde SP et si vous n'avez pas besoin de revenir à la valeur du SP, faites-le simplement:
Exec secondSPName @anyparams
Sinon, si vous avez besoin des valeurs renvoyées par votre deuxième SP dans le premier, créez une variable de table temporaire avec un nombre égal de colonnes et avec la même définition de retour de colonne par deuxième SP. Ensuite, vous pouvez obtenir ces valeurs en premier SP comme:
Insert into @tep_table
Exec secondSPName @anyparams
Mise à jour:
Pour transmettre le paramètre à la seconde sp, procédez comme suit:
Declare @id ID_Column_datatype
Set @id=(Select id from table_1 Where yourconditions)
Exec secondSPName @id
Mise à jour 2:
Supposons que votre deuxième sp retourne Id
et Name
où le type de id
est int
et name
est de varchar(64)
type.
maintenant, si vous voulez sélectionner ces valeurs dans sp premier, créez une variable temporaire table
et insérez-y des valeurs:
Declare @tep_table table
(
Id int,
Name varchar(64)
)
Insert into @tep_table
Exec secondSP
Select * From @tep_table
Cela vous retournera les valeurs renvoyées par le deuxième SP.
J'espère que cela efface tous vos doutes.
Supposons que vous ayez une procédure stockée comme celle-ci
Première procédure stockée:
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
Maintenant, vous voulez appeler cette procédure depuis une autre procédure stockée comme ci-dessous
Deuxième procédure stockée
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
Comme vous l'avez vu ci-dessus, nous pouvons appeler une procédure stockée à partir d'une autre
Oui, vous pouvez faire ça comme ça:
BEGIN
DECLARE @Results TABLE (Tid INT PRIMARY KEY);
INSERT @Results
EXEC Procedure2 [parameters];
SET @total 1;
END
SELECT @total
Votre sp_test: Renvoie le nom complet
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
Dans votre 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;
...
Vous pouvez appeler des fonctions définies par l'utilisateur dans une procédure stockée en alternance
cela peut résoudre votre problème d'appeler une procédure stockée
Oui, il est facile d’appeler la fonction dans la procédure de magasin.
par exemple Créer la fonction de définition de l’âge de l’utilisateur et l’utiliser dans une requête sélectionnée.
select dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) as Age,R.DateOfBirth,r.RegistrationDate from T_Registration R