Serveur d'impression

Renvoyer des données à partir d'une procédure stockée – SQL Server – Serveur d’impression

Le 16 juillet 2020 - 24 minutes de lecture


<! – ->

S'applique à :S'applique à: Oui serveur SQLserveur SQL (toutes les versions prises en charge)Ouiserveur SQLserveur SQL (toutes les versions prises en charge) OuiBase de données SQL AzureBase de données SQL AzureOuiBase de données SQL AzureBase de données SQL Azure OuiInstance gérée Azure SQLInstance gérée Azure SQLOuiInstance gérée Azure SQLInstance gérée Azure SQL OuiAzure Synapse AnalyticsAzure Synapse AnalyticsOuiAzure Synapse AnalyticsAzure Synapse Analytics OuiEntrepôt de données parallèleEntrepôt de données parallèleOuiEntrepôt de données parallèleEntrepôt de données parallèleS'applique à :S'applique à: Oui serveur SQLserveur SQL (toutes les versions prises en charge)Ouiserveur SQLserveur SQL (toutes les versions prises en charge) OuiBase de données SQL AzureBase de données SQL AzureOuiBase de données SQL AzureBase de données SQL Azure OuiInstance gérée Azure SQLInstance gérée Azure SQLOuiInstance gérée Azure SQLInstance gérée Azure SQL OuiAzure Synapse AnalyticsAzure Synapse AnalyticsOuiAzure Synapse AnalyticsAzure Synapse Analytics OuiEntrepôt de données parallèleEntrepôt de données parallèleOuiEntrepôt de données parallèleEntrepôt de données parallèle

Il existe trois méthodes pour renvoyer des données d'une procédure vers un programme appelant: jeux de résultats, paramètres de sortie et codes de retour.Il existe trois façons de renvoyer des données d'une procédure vers un programme appelant: jeux de résultats, paramètres de sortie et codes de retour. Cette rubrique fournit des informations sur les trois approches.Cette rubrique fournit des informations sur les trois approches.

Retour de données avec jeux de résultatsRetour de données à l'aide d'ensembles de résultats

Si vous incluez une instruction SELECT dans le corps d'une procédure stockée (mais pas une instruction SELECT … INTO ou INSERT … SELECT), les lignes spécifiées par l'instruction SELECT sont envoyées directement au client.Si vous incluez une instruction SELECT dans le corps d'une procédure stockée (mais pas une instruction SELECT … INTO ou INSERT … SELECT), les lignes spécifiées par l'instruction SELECT seront envoyées directement au client. Pour les grands jeux de résultats, l'exécution de la procédure stockée ne va pas à l'instruction tant que le jeu de résultats n'a pas été entièrement envoyé au client.Pour les jeux de résultats volumineux, l'exécution de la procédure stockée ne se poursuivra pas jusqu'à l'instruction suivante tant que le jeu de résultats n'a pas été complètement envoyé au client. Pour les petits jeux de résultats, les résultats sont mis en file d'attente pour être renvoyés au client et l'exécution se poursuit.Pour les petits jeux de résultats, les résultats seront spoulés pour être renvoyés au client et l'exécution se poursuivra. Si plusieurs de ces instructions SELECT sont exécutées pendant l'exécution de la procédure stockée, plusieurs jeux de résultats sont envoyés au client.Si plusieurs de ces instructions SELECT sont exécutées pendant l'exécution de la procédure stockée, plusieurs jeux de résultats seront envoyés au client. Ce comportement s'applique également aux lots TSQL imbriqués, aux procédures stockées imbriquées et aux lots TSQL de niveau supérieur.Ce comportement s'applique également aux lots TSQL imbriqués, aux procédures stockées imbriquées et aux lots TSQL de niveau supérieur.

Exemples de retour de données avec un jeu de résultatsExemples de renvoi de données à l'aide d'un jeu de résultats

L'exemple suivant montre une procédure stockée qui renvoie les valeurs LastName et SalesYTD pour toutes les lignes de SalesPerson qui apparaissent également dans la vue vEmployee.L'exemple suivant montre une procédure stockée qui renvoie les valeurs LastName et SalesYTD pour toutes les lignes SalesPerson qui apparaissent également dans la vue vEmployee.

UTILISER AdventureWorks2012;
ALLER
SI L'OBJET_ID (& # 39; Sales.uspGetEmployeeSalesYTD & # 39 ;, & # 39; P & # 39;) N'EST PAS NUL
   DROP PROCEDURE Sales.uspGetEmployeeSalesYTD;
ALLER
CRÉER UNE PROCÉDURE Sales.uspGetEmployeeSalesYTD
COMME
 
   ACTIVER NOCOUNT;
   SELECT LastName, SalesYTD
   DE Sales.SalesPerson AS sp
   REJOIGNEZ HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID
   
REVENIR
ALLER  
 

Retour de données à l'aide d'un paramètre de sortieRetour de données à l'aide d'un paramètre de sortie

Si vous spécifiez le mot clé OUTPUT pour un paramètre dans la définition de procédure, la procédure peut renvoyer la valeur actuelle du paramètre au programme appelant à la fin de la procédure.Si vous spécifiez le mot clé OUTPUT pour un paramètre dans la définition de procédure, la procédure peut renvoyer la valeur actuelle du paramètre au programme appelant à la fin de la procédure. Pour enregistrer la valeur du paramètre dans une variable afin que le programme appelant puisse l'utiliser, cette dernière doit inclure le mot clé OUTPUT lors de l'exécution de la procédure.Pour enregistrer la valeur du paramètre dans une variable qui peut être utilisée dans le programme appelant, le programme appelant doit utiliser le mot clé OUTPUT lors de l'exécution de la procédure. Pour plus d'informations sur les types de données pouvant être utilisés comme paramètres de sortie, consultez CREATE PROCEDURE (Transact-SQL).Pour plus d'informations sur les types de données pouvant être utilisés comme paramètres de sortie, consultez CREATE PROCEDURE (Transact-SQL).

Exemples de paramètres de sortieExemples de paramètres de sortie

L'exemple ci-dessous illustre une procédure avec un paramètre d'entrée et un paramètre de sortie.L'exemple suivant montre une procédure avec un paramètre d'entrée et un paramètre de sortie. Le paramètre @Vendeur doit recevoir une valeur d'entrée spécifiée par le programme appelant.thé @Vendeur Le paramètre recevrait une valeur d'entrée spécifiée par le programme appelant. L'instruction SELECT utilise la valeur passée dans le paramètre d'entrée pour obtenir la valeur VentesYTD correct.L'instruction SELECT utilise la valeur passée dans le paramètre d'entrée pour obtenir la bonne VentesYTD valeur. L'instruction SELECT affecte également la valeur au paramètre de sortie @SalesYTD , qui renvoie la valeur au programme appelant à la fin de la procédure.L'instruction SELECT affecte également la valeur à la @SalesYTD paramètre de sortie, qui renvoie la valeur au programme appelant à la fin de la procédure.

UTILISER AdventureWorks2012;
ALLER
SI L'OBJET_ID (& # 39; Sales.uspGetEmployeeSalesYTD & # 39 ;, & # 39; P & # 39;) N'EST PAS NUL
    DROP PROCEDURE Sales.uspGetEmployeeSalesYTD;
ALLER
CRÉER UNE PROCÉDURE Sales.uspGetEmployeeSalesYTD
@SalesPerson nvarchar (50),
@SalesYTD money OUTPUT
COMME
  
    ACTIVER NOCOUNT;
    SELECT @SalesYTD = SalesYTD
    DE Sales.SalesPerson AS sp
    REJOIGNEZ HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID
    OERE LastName = @SalesPerson;
REVENIR
ALLER  
  

L'exemple suivant appelle la procédure créée dans le premier exemple et stocke la valeur de sortie renvoyée par la procédure appelée dans la variable @SalesYTD , qui est local au programme appelant.L'exemple suivant appelle la procédure créée dans le premier exemple et enregistre la valeur de sortie renvoyée par la procédure appelée dans le @SalesYTD variable, qui est locale au programme appelant.

- Déclarez la variable pour recevoir la valeur de sortie de la procédure.
DECLARE @SalesYTDBySalesPerson money;
- Exécutez la procédure en spécifiant un nom de famille pour le paramètre d'entrée
- et sauvegarde de la valeur de sortie dans la variable @SalesYTDBySalesPerson
EXECUTE Sales.uspGetEmployeeSalesYTD
    N & # 39; Blythe & # 39 ;, @SalesYTD = @SalesYTDBySalesPerson OUTPUT;
- Affiche la valeur renvoyée par la procédure.
IMPRIMER & # 39; Depuis le début de l'année, les ventes de cet employé sont & # 39; +
    convert (varchar (10), @ SalesYTDBySalesPerson);
ALLER  
  

Des valeurs d'entrée peuvent également être définies pour les paramètres OUTPUT lors de l'exécution de la procédure.Des valeurs d'entrée peuvent également être spécifiées pour les paramètres OUTPUT lors de l'exécution de la procédure. Ainsi, la procédure peut recevoir une valeur du programme appelant, la modifier ou l'utiliser pour exécuter des opérations, puis renvoyer la nouvelle valeur au programme appelant.Cela permet à la procédure de recevoir une valeur du programme appelant, de modifier ou d'effectuer des opérations avec la valeur, puis de renvoyer la nouvelle valeur au programme appelant. Dans l'exemple précédent, la variable @SalesYTDBySalesPerson peut recevoir une valeur avant que le programme appelle la procédure Sales.uspGetEmployeeSalesYTD .Dans l'exemple précédent, le @SalesYTDBySalesPerson une valeur peut être affectée à la variable avant que le programme n'appelle la Sales.uspGetEmployeeSalesYTD procédure. L'instruction d'exécution transmet ensuite la valeur de la variable @SalesYTDBySalesPerson le paramètre OUTPUT @SalesYTD .L'instruction execute passerait le @SalesYTDBySalesPerson valeur variable dans le @SalesYTD Paramètre OUTPUT. Ensuite, dans le corps de la procédure, la valeur peut être utilisée pour les calculs qui génèrent une nouvelle valeur.Ensuite, dans le corps de la procédure, la valeur peut être utilisée pour les calculs qui génèrent une nouvelle valeur. La nouvelle valeur est sortie de la procédure par le paramètre OUTPUT, mettant à jour la valeur dans la variable @SalesYTDBySalesPerson lorsque la procédure se termine.La nouvelle valeur serait retransmise hors de la procédure via le paramètre OUTPUT, mettant à jour la valeur dans le @SalesYTDBySalesPerson variable à la fin de la procédure. Ce mécanisme est souvent appelé «capacité de passage par référence».Ceci est souvent appelé «capacité de passage par référence».

Si vous spécifiez OUTPUT pour un paramètre lorsque vous appelez une procédure lorsque le paramètre n'est pas défini avec OUTPUT dans la définition de la procédure, vous obtiendrez un message d'erreur.Si vous spécifiez OUTPUT pour un paramètre lorsque vous appelez une procédure et que ce paramètre n'est pas défini en utilisant OUTPUT dans la définition de procédure, vous obtenez un message d'erreur. Il est néanmoins possible d'exécuter une procédure avec des paramètres de sortie et de ne pas spécifier OUTPUT lors de l'exécution de la procédure.Cependant, vous pouvez exécuter une procédure avec des paramètres de sortie et ne pas spécifier OUTPUT lors de l'exécution de la procédure. Aucune erreur n'est renvoyée, mais vous ne pouvez pas utiliser la valeur de sortie dans le programme appelant.Aucune erreur n'est renvoyée, mais vous ne pouvez pas utiliser la valeur de sortie dans le programme appelant.

Utilisation du type de données Cursor dans les paramètres OUTPUTUtilisation du type de données du curseur dans les paramètres de sortie

Transact-SQLTransact-SQL Les procédures ne peuvent pas utiliser le type de données le curseur que pour les paramètres OUTPUT.les procédures peuvent utiliser le le curseur type de données uniquement pour les paramètres OUTPUT. Si le type de données le curseur est spécifié pour un paramètre, les mots clés VARYING et OUTPUT doivent être spécifiés pour ce paramètre dans la définition de la procédure.Si la le curseur le type de données est spécifié pour un paramètre, les mots clés VARYING et OUTPUT doivent être spécifiés pour ce paramètre dans la définition de la procédure. Un paramètre ne peut être spécifié que comme OUTPUT, mais si le mot-clé VARYING est spécifié dans la déclaration du paramètre, le type de données doit être le curseur et vous devez également spécifier le mot-clé OUTPUT.Un paramètre peut être spécifié uniquement comme OUTPUT mais si le mot clé VARYING est spécifié dans la déclaration de paramètre, le type de données doit être le curseur et le mot clé OUTPUT doit également être spécifié.

Remarques

Type de données le curseur ne peut pas être lié aux variables d'application via des API de base de données, telles que OLE DB, ODBC, ADO et DB-Library.thé le curseur le type de données ne peut pas être lié à des variables d'application via les API de base de données telles que OLE DB, ODBC, ADO et DB-Library. Les paramètres OUTPUT doivent être liés avant qu'une application puisse exécuter une procédure, les procédures qui contiennent des paramètres OUTPUT de type le curseur ne peut pas être appelé à partir des API de base de données.Étant donné que les paramètres OUTPUT doivent être liés avant qu'une application puisse exécuter une procédure, les procédures avec le curseur Les paramètres OUTPUT ne peuvent pas être appelés à partir des API de base de données. Ces procédures peuvent être appelées à partir de traitements, de procédures ou de déclencheurs Transact-SQLTransact-SQL uniquement lorsque la variable OUTPUT de type le curseur est affecté à une variable Transact-SQLTransact-SQL tapez local le curseur .Ces procédures peuvent être appelées depuis Transact-SQLTransact-SQL lots, procédures ou déclencheurs uniquement lorsque le le curseur La variable OUTPUT est affectée à un Transact-SQLTransact-SQL local le curseur variable.

Règles pour les paramètres de sortie du curseurRègles pour les paramètres de sortie du curseur

Les règles suivantes régissent les paramètres de sortie du type le curseur pendant l'exécution de la procédure:Les règles suivantes concernent le curseur paramètres de sortie lorsque la procédure est exécutée:

  • Dans le cas d'un curseur avant uniquement, les lignes renvoyées dans l'ensemble de résultats du curseur sont uniquement celles situées à la position du curseur ou au-delà à la fin de la procédure, par exemple:Pour un curseur en avant uniquement, les lignes renvoyées dans le jeu de résultats du curseur ne sont que les lignes situées au-delà de la position du curseur à la fin de l'exécution de la procédure, par exemple:

    • Un curseur qui ne permet pas le défilement est ouvert dans une procédure, dans un jeu de résultats de 100 lignes, appelé RS.Un curseur non défilable est ouvert dans une procédure sur un jeu de résultats nommé RS de 100 lignes.

    • La procédure extrait les 5 premières lignes du jeu de résultats RS.La procédure récupère les 5 premières lignes du jeu de résultats RS.

    • La procédure est renvoyée à son correspondant.La procédure revient à son appelant.

    • Le jeu de résultats RS renvoyé à l'appelant se compose des lignes 6 à 100 de RS et le curseur dans l'appelant est placé avant la première ligne de RS.Le jeu de résultats RS renvoyé à l'appelant se compose de lignes de 6 à 100 de RS, et le curseur dans l'appelant est positionné avant la première ligne de RS.

  • Dans le cas d'un curseur avant uniquement, si le curseur se trouve avant la première ligne lorsque la procédure existe, l'ensemble des résultats est renvoyé au traitement des instructions, à la procédure ou au déclencheur appelant.Pour un curseur avant uniquement, si le curseur est positionné avant la première ligne à la fin de la procédure, l'ensemble des résultats est renvoyé au lot, à la procédure ou au déclencheur appelant. Une fois renvoyé, la position du curseur est fixée au début de la première ligne.Une fois renvoyé, la position du curseur est définie avant la première ligne.

  • Dans le cas d'un curseur avant uniquement, si le curseur est placé au-delà de la fin de la dernière ligne lorsque la procédure existe, le système renvoie un jeu de résultats vide au traitement de l'instruction, à la procédure ou à l'appelant déclencheur.Pour un curseur en avant uniquement, si le curseur est positionné au-delà de la fin de la dernière ligne à la fin de la procédure, un jeu de résultats vide est renvoyé au lot, à la procédure ou au déclencheur appelant.

    Remarques

    Un jeu de résultats vide est différent d'une valeur NULL.Un jeu de résultats vide n'est pas identique à une valeur nulle.

  • Dans le cas d'un curseur permettant le défilement, toutes les lignes du jeu de résultats sont renvoyées au traitement des instructions, à la procédure ou au déclencheur appelant lorsque la procédure existe.Pour un curseur déroulant, toutes les lignes du jeu de résultats sont renvoyées au lot, à la procédure ou au déclencheur appelant à la fin de la procédure. Lors du retour, la position du curseur est conservée à la position de la dernière extraction exécutée dans la procédure.Lorsqu'elle est retournée, la position du curseur est laissée à la position de la dernière extraction exécutée dans la procédure.

  • Pour tous les types de curseurs, si le curseur est fermé, une valeur NULL est renvoyée au traitement des instructions, à la procédure ou au déclencheur appelant.Pour tout type de curseur, si le curseur est fermé, une valeur nulle est renvoyée au lot, à la procédure ou au déclencheur appelant. Cela se produit également si un curseur est affecté à un paramètre mais n'a jamais été ouvert.Ce sera également le cas si un curseur est affecté à un paramètre, mais que ce curseur n'est jamais ouvert.

    Remarques

    L'état fermé n'a pas d'importance jusqu'au retour.L'état fermé n'a d'importance qu'au moment du retour. Par exemple, vous pouvez fermer un curseur pendant l'exécution de la procédure, le rouvrir plus tard dans la procédure et renvoyer le jeu de résultats pour ce curseur au processeur d'instructions, à la procédure ou au déclencheur appelant.Par exemple, il est valide de fermer un curseur pendant la procédure, de le rouvrir plus tard dans la procédure et de renvoyer le jeu de résultats de ce curseur au lot, à la procédure ou au déclencheur appelant.

Exemples de paramètres de sortie du curseurExemples de paramètres de sortie du curseur

L'exemple ci-dessous crée une procédure avec un paramètre de sortie @currency_cursor en utilisant le type de données le curseur.Dans l'exemple suivant, une procédure est créée qui spécifie un paramètre de sortie, @currency_cursor en utilisant le le curseur Type de données. La procédure stockée est ensuite appelée en cours de traitement.La procédure est ensuite appelée dans un lot.

Commencez par créer la procédure qui déclare puis ouvre un curseur dans la table Currency.Créez d'abord la procédure qui déclare, puis ouvrez un curseur sur la table Currency.

UTILISER AdventureWorks2012;
ALLER
SI L'OBJET_ID (& # 39; dbo.uspCurrencyCursor & # 39 ;, & # 39; P & # 39;) N'EST PAS NUL
    DROP PROCEDURE dbo.uspCurrencyCursor;
ALLER
CREATE PROCEDURE dbo.uspCurrencyCursor
    @CurrencyCursor CURSOR VARYING OUTPUT
COMME
    ACTIVER NOCOUNT;
    SET @CurrencyCursor = CURSOR
    FORWARD_ONLY STATIC FOR
      SELECT CurrencyCode, Name
      FROM Sales.Currency;
    OPEN @CurrencyCursor;
ALLER  
  

Ensuite, exécutez un traitement d'instruction qui déclare une variable de curseur local, exécute la procédure pour affecter le curseur à la variable locale et extrait les lignes du curseur.Ensuite, exécutez un lot qui déclare une variable de curseur local, exécute la procédure pour affecter le curseur à la variable locale, puis récupère les lignes à partir du curseur.

UTILISER AdventureWorks2012;
ALLER
DECLARE @MyCursor CURSOR;
EXEC dbo.uspCurrencyCursor @CurrencyCursor = @MyCursor OUTPUT;
TANT QUE (@@ FETCH_STATUS = 0)
COMMENCER;
     FETCH NEXT FROM @MyCursor;
FIN;
CLOSE @MyCursor;
DEALLOCATE @MyCursor;
ALLER  
  

Retour des données à l'aide d'un code retourRetour de données à l'aide d'un code retour

Une procédure peut renvoyer une valeur entière appelée "code retour" pour indiquer l'état d'exécution d'une procédure.Une procédure peut renvoyer une valeur entière appelée code de retour pour indiquer l'état d'exécution d'une procédure. Le code retour d'une procédure est défini à l'aide de l'instruction RETURN.Vous spécifiez le code retour pour une procédure à l'aide de l'instruction RETURN. Comme dans le cas des paramètres OUTPUT, vous devez stocker le code retour dans une variable lors de l'exécution de la procédure afin de pouvoir utiliser sa valeur dans le programme appelant.Comme pour les paramètres OUTPUT, vous devez enregistrer le code retour dans une variable lors de l'exécution de la procédure afin d'utiliser la valeur du code retour dans le programme appelant. Par exemple, la variable d'attribution @résultat , de type de données int , utilisé pour stocker le code retour de la procédure my_proc, pour que :Par exemple, la variable d'affectation @résultat du type de données int est utilisé pour stocker le code retour de la procédure my_proc, tel que:

DECLARE @result int;
EXECUTE @result = my_proc;  

Les codes retour sont couramment utilisés dans les blocs de procédures de contrôle de flux pour définir la valeur du code retour pour chaque situation d'erreur possible.Les codes retour sont couramment utilisés dans les blocs de contrôle de flux dans les procédures pour définir la valeur du code retour pour chaque situation d'erreur possible. Vous pouvez utiliser la fonction @@ ERROR après une instruction Transact-SQLTransact-SQL pour détecter si une erreur s'est produite lors de l'exécution de l'instruction.Vous pouvez utiliser la fonction @@ ERROR après un Transact-SQLTransact-SQL pour détecter si une erreur s'est produite lors de l'exécution de l'instruction. Avant l'introduction de la gestion des erreurs TRY / CATCH / THROW dans TSQL, les codes retour étaient parfois nécessaires pour déterminer le succès ou l'échec des procédures stockées.Avant l'introduction de TRY / CATCH / THROW, la gestion des erreurs dans les codes de retour TSQL était parfois nécessaire pour déterminer le succès ou l'échec des procédures stockées. Les procédures stockées doivent toujours indiquer l'échec avec une erreur (généré avec THROW / RAISERROR si nécessaire) et ne pas utiliser de code retour pour indiquer l'échec.Les procédures stockées doivent toujours indiquer l'échec avec une erreur (généré avec THROW / RAISERROR si nécessaire), et ne pas s'appuyer sur un code retour pour indiquer l'échec. Il est également recommandé d'éviter d'utiliser le code retour pour renvoyer les données d'application.Vous devez également éviter d'utiliser le code retour pour renvoyer les données d'application.

Exemples de codes retourExemples de codes de retour

L'exemple suivant illustre la procédure usp_GetSalesYTD gestion des erreurs qui définit les valeurs du code retour pour diverses erreurs.L'exemple suivant montre le usp_GetSalesYTD procédure avec gestion des erreurs qui définit des valeurs de code retour spéciales pour diverses erreurs. Le tableau suivant montre la valeur entière affectée par la procédure à chaque erreur possible et la signification correspondante pour chaque valeur.Le tableau suivant montre la valeur entière affectée par la procédure à chaque erreur possible et la signification correspondante pour chaque valeur.

Valeur du code retourValeur du code retour SensSens
00 Exécution réussie.Exécution réussie.
11 La valeur du paramètre requis n'est pas spécifiée.La valeur de paramètre requise n'est pas spécifiée.
22 Valeur de paramètre non valide spécifiée.La valeur de paramètre spécifiée n'est pas valide.
33 Erreur lors de l'obtention de la valeur des ventes.Une erreur s'est produite lors de l'obtention de la valeur des ventes.
44 Valeur de vente nulle trouvée pour le vendeur.Valeur de vente NULL trouvée pour le vendeur.
UTILISER AdventureWorks2012;
ALLER
SI OBJECT_ID (& # 39; Sales.usp_GetSalesYTD & # 39 ;, & # 39; P & # 39;) N'EST PAS NUL
    DROP PROCEDURE Sales.usp_GetSalesYTD;
ALLER
CRÉER UNE PROCÉDURE Sales.usp_GetSalesYTD
@SalesPerson nvarchar (50) = NULL, - valeur par défaut NULL
@SalesYTD money = NULL OUTPUT
COMME
  
- Validez le paramètre @SalesPerson.
SI @SalesPerson EST NUL
   COMMENCER
       IMPRIMER & # 39; ERREUR: vous devez indiquer un nom de famille pour le commercial. & # 39;
       RETOUR (1)
   FIN
AUTRE
   COMMENCER
   - Assurez-vous que la valeur est valide.
   IF (SELECT COUNT (*) FROM HumanResources.vEmployee
          OERE LastName = @SalesPerson) = 0
      RETOUR (2)
   FIN
- Obtenez les ventes pour le nom spécifié et
- affectez-le au paramètre de sortie.
SELECT @SalesYTD = SalesYTD
DE Sales.SalesPerson AS sp
REJOIGNEZ HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID
OERE LastName = @SalesPerson;
- Recherchez les erreurs SQL Server.
SI @@ ERREUR <> 0
   COMMENCER
      RETOUR (3)
   FIN
AUTRE
   COMMENCER
   - Vérifiez si la valeur ytd_sales est NULL.
     SI @SalesYTD EST NULL
       RETOUR (4)
     AUTRE
      - SUCCÈS !!
        RETOUR (0)
   FIN
- Exécutez la procédure stockée sans spécifier de valeur d'entrée.
EXEC Sales.usp_GetSalesYTD;
ALLER
- Exécutez la procédure stockée avec une valeur d'entrée.
DECLARE @SalesYTDForSalesPerson money, @ret_code int;
- Exécutez la procédure en spécifiant un nom de famille pour le paramètre d'entrée
- et sauvegarde de la valeur de sortie dans la variable @SalesYTD
EXECUTE Sales.usp_GetSalesYTD
    N & # 39; Blythe & # 39 ;, @SalesYTD = @SalesYTDForSalesPerson OUTPUT;
IMPRIMER N & # 39; Depuis le début de l'année, les ventes de cet employé sont & # 39; +
    CONVERTIR (varchar (10), @SalesYTDForSalesPerson);  
  

L'exemple suivant crée un programme responsable de la gestion des codes retour retournés par la procédure usp_GetSalesYTD .L'exemple suivant crée un programme pour gérer les codes retour renvoyés par le usp_GetSalesYTD procédure.

- Déclarez les variables pour recevoir la valeur de sortie et le code retour
- de la procédure.
DECLARE @SalesYTDForSalesPerson money, @ret_code int;
  
- Exécutez la procédure avec une valeur title_id
- et enregistrez la valeur de sortie et le code retour dans des variables.
EXECUTE @ret_code = Sales.usp_GetSalesYTD
    N & # 39; Blythe & # 39 ;, @SalesYTD = @SalesYTDForSalesPerson OUTPUT;
- Vérifiez les codes retour.
SI @ret_code = 0
COMMENCER
   IMPRIMER & # 39; Procédure exécutée avec succès & # 39;
   - Affiche la valeur renvoyée par la procédure.
   IMPRIMER & # 39; Depuis le début de l'année, les ventes de cet employé sont & # 39; + CONVERTIR (varchar (10), @ SalesYTDForSalesPerson)
FIN
ELSE IF @ret_code = 1
   IMPRIMER & # 39; ERREUR: vous devez indiquer un nom de famille pour le commercial. & # 39;
ELSE IF @ret_code = 2
   IMPRIMER & # 39; ERREUR: vous devez saisir un nom de famille valide pour le commercial. & # 39;
ELSE IF @ret_code = 3
   IMPRIMER & # 39; ERREUR: une erreur s'est produite lors de l'obtention de la valeur des ventes. & # 39;
ELSE IF @ret_code = 4
   IMPRESSION & # 39; ERREUR: aucune vente enregistrée pour cet employé. & # 39;
ALLER  
  

Voir aussiVoir également

DECLARE @local_variable (Transact-SQL) DECLARE @local_variable (Transact-SQL)
IMPRIMER (Transact-SQL) IMPRIMER (Transact-SQL)
SET @local_variable (Transact-SQL) SET @local_variable (Transact-SQL)
Sliders Curseurs
RETOUR (Transact-SQL) RETOUR (Transact-SQL)
@@ ERREUR (Transact-SQL)@@ ERREUR (Transact-SQL)

<! – ->

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.