web-dev-qa-db-fra.com

Exécuter une procédure stockée dans une autre procédure stockée dans SQL Server

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?

33
Roys

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.

43
Ken Clark

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

5
Sagar Hirapara

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
2
Vishal Suthar

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;
...
0
alditis

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

0
meer

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