Utilisation de jeux de résultats dans la tâche d'exécution SQL

Dans un package Integration Services, le type de commande SQL utilisé par la tâche détermine si un jeu de résultats est retourné à la tâche d'exécution SQL. Par exemple, une instruction SELECT retourne en général un jeu de résultats, mais une instruction INSERT ne le fait pas.

Le contenu du jeu de résultats varie également selon la commande SQL. Par exemple, l'ensemble de résultats issu d'une instruction SELECT peut contenir un nombre de lignes quelconque (aucune ligne, une ligne ou de nombreuses lignes). Toutefois, le jeu de résultats d'une instruction SELECT qui retourne un nombre ou une somme contient une seule ligne.

L'utilisation d'ensembles de résultats dans une tâche d'exécution SQL ne permet pas uniquement de savoir si la commande SQL retourne un ensemble de résultats et ce que celui-ci contient. D'autres indications et spécifications d'utilisation permettent d'utiliser avec succès des jeux de résultats dans la tâche d'exécution SQL. Le reste de cette rubrique traite de ces indications et spécifications d'utilisation.

  • Spécification d'un type de jeu de résultats

  • Remplissage d'une variable à l'aide d'un jeu de résultats

  • Configuration des jeux de résultats dans l'éditeur de tâche d'exécution SQL

Spécification d'un type de jeu de résultats

La tâche d'exécution SQL prend en charge les types de jeux de résultats suivants :

  • L'ensemble de résultats Aucun est utilisé lorsque la requête ne retourne aucun résultat. Par exemple, cet ensemble de résultats est utilisé pour les requêtes qui ajoutent, modifient et suppriment des enregistrements dans une table.

  • L'ensemble de résultats Ligne unique est utilisé lorsque la requête ne retourne qu'une seule ligne. Par exemple, ce jeu de résultats est utilisé pour une instruction SELECT qui retourne un nombre ou une somme.

  • Le jeu de résultats Ensemble de résultats complet est utilisé lorsque la requête retourne plusieurs lignes. Par exemple, cet ensemble de résultats est utilisé pour une instruction SELECT qui extrait toutes les lignes d'une table.

  • L'ensemble de résultats XML est utilisé lorsque la requête retourne un ensemble de résultats dans un format XML. Par exemple, cet ensemble de résultats est utilisé pour une instruction SELECT qui comprend une clause FOR XML.

Si la tâche d'exécution SQL utilise l'ensemble de résultats Ensemble de résultats complet et que la requête retourne plusieurs ensemble de lignes, la tâche ne retourne que le premier. Si cet ensemble de lignes génère une erreur, la tâche la signale. En revanche, si d'autres ensembles de lignes génèrent des erreurs, la tâche ne les signale pas.

Selon le type de gestionnaire de connexions, les valeurs retournées par l'instruction SQL qui ne sont pas déjà des chaînes peuvent être converties implicitement ou explicitement en chaînes. Un gestionnaire de connexions ADO ou ODBC convertit implicitement les valeurs retournées en chaînes. Un gestionnaire de connexions OLE DB convertit explicitement les valeurs retournées des types de données DBTYPE_I8, DBTYPE_UI8, DBTYPE_NUMERIC, DBTYPE_GUID et DBTYPE_BYTES en chaînes. Toutefois, un gestionnaire de connexions ADO.NET ne convertit pas les valeurs retournées en chaînes.

Remplissage d'une variable avec un jeu de résultats

Vous pouvez lier le jeu de résultats retourné par une requête à une variable définie par l'utilisateur si le type du jeu de résultats est une ligne unique, un ensemble de lignes ou des données XML.

Si le type de l'ensemble de résultats est Ligne unique, vous pouvez lier une colonne du résultat obtenu à une variable en utilisant le nom de colonne comme nom d'ensemble de résultats. Vous pouvez également utiliser comme nom la position ordinale de la colonne dans la liste des colonnes. Par exemple, le nom de l'ensemble de résultats de la requête SELECT Color FROM Production.Product WHERE ProductID = ? pourrait être Color ou 0. Si la requête retourne plusieurs colonnes et que vous souhaitez accéder aux valeurs de toutes les colonnes, vous devez lier chaque colonne à une variable différente. Si vous associez des colonnes à des variables en utilisant des numéros comme noms de jeux de résultats, ces numéros reflètent l'ordre d'apparition des colonnes dans la liste des colonnes de la requête. Par exemple, dans la requête SELECT Color, ListPrice, FROM Production.Product WHERE ProductID = ?, vous utilisez 0 pour la colonne Color et 1 pour la colonne ListPrice. La possibilité d'utiliser un nom de colonne comme nom d'ensemble de résultats dépend du fournisseur que la tâche a été configurée pour utiliser. Tous les fournisseurs ne rendent pas les noms de colonnes disponibles.

Certaines requêtes qui retournent une valeur unique peuvent ne pas inclure de noms de colonnes. Par exemple, l'instruction SELECT COUNT (*) FROM Production.Product ne retourne aucun nom de colonne. Vous pouvez accéder à l'ensemble de résultats en utilisant la position ordinale, 0, comme nom de résultat. Pour accéder au résultat de retour par nom de colonne, la requête doit inclure une clause AS <nom alias> pour fournir un nom de colonne. L'instruction SELECT COUNT (*)AS CountOfProduct FROM Production.Product, fournit la colonne CountOfProduct. Vous pouvez ensuite accéder à la colonne de résultat de retour en utilisant le nom de colonne CountOfProduct ou la position ordinale, 0.

Si le type de l'ensemble de résultats est Ensemble de résultats complet ou XML, vous devez utiliser 0 comme nom d'ensemble de résultats.

Lorsque vous associez une variable à un ensemble de résultats à l'aide du type Ligne unique, la variable doit être d'un type de données compatible avec celui de la colonne contenue dans l'ensemble de résultats. Par exemple, vous ne pouvez pas associer un ensemble de résultats contenant un type de données String à une variable de type de données numérique. Un ensemble de résultats XML ne peut être associé qu'à une variable de type de données String ou Object. Si la variable est de type de données String, la tâche d'exécution SQL retourne une chaîne et la source XML peut exploiter les données XML. Si la variable est de type de données Object, la tâche d'exécution SQL retourne un objet DOM (Document Object Model). Un ensemble de résultats complet doit correspondre à une variable du type de données Object. Le résultat obtenu est un objet d'ensemble de lignes. Vous pouvez écrire des tâches personnalisées qui explorent l'objet d'ensemble de lignes et accèdent aux informations relatives aux colonnes et aux données de l'ensemble de lignes.

Le tableau suivant récapitule les types de données des variables pouvant correspondre à des ensembles de résultats.

Type d'ensemble de résultats

Type de données de la variable

Type d'objet

Ligne unique

Tout type compatible avec la colonne de type contenue dans l'ensemble de résultats.

Non applicable

Ensemble de résultats complet

Object

Si la tâche utilise un gestionnaire de connexions natif, tel que les gestionnaires de connexions ADO, OLE DB, Excel et ODBC, l'objet retourné est un Recordset ADO.

Si la tâche utilise un gestionnaire de connexions managées, tel que le gestionnaire de connexions ADO.NET, l'objet retourné est un System.Data.DataSet.

XML

String

String

XML

Object

Si la tâche utilise un gestionnaire de connexions natif, tel que les gestionnaires de connexions ADO, OLE DB, Excel et ODBC, l'objet retourné est un MSXML6.IXMLDOMDocument.

Si la tâche utilise un gestionnaire de connexions managées, tel que le gestionnaire de connexions ADO.NET, l'objet retourné est un System.Xml.XmlDocument.

Vous pouvez définir la variable dans l'étendue de la tâche d'exécution SQL ou dans celle du package. Si la variable a l'étendue d'un package, le jeu de résultats est disponible pour les autres tâches et conteneurs figurant dans le package, ainsi que pour les packages exécutés par les tâches d'exécution de package ou d'exécution de package DTS 2000.

Lorsque vous mappez une variable à un jeu de résultats Ligne unique, les valeurs retournées par l'instruction SQL qui ne sont pas encore des chaînes peuvent être converties en chaînes. Le fait que cette conversion se produise ou non, ou qu'elle soit implicite ou explicite, dépend du type de gestionnaire de connexions utilisé :

  • Avec un gestionnaire de connexions ADO.NET, la conversion ne se produit pas.

  • Avec un gestionnaire de connexions ADO ou ODBC, cette conversion se produit implicitement.

  • Un gestionnaire de connexions OLE DB ou Excel convertit explicitement les valeurs des types DBTYPE_NUMERIC, DBTYPE_GUID et DBTYPE_BYTES en chaînes.

Pour plus d'informations sur le chargement d'un ensemble de résultats dans une variable, consultez Procédure : mapper des ensembles de résultats à des variables dans une tâche d'exécution SQL.

Configuration d'ensembles de résultats dans la tâche d'exécution SQL

Pour plus d'informations sur les propriétés de jeux de résultats que vous pouvez définir dans le concepteur SSIS, cliquez sur la rubrique suivante :

Pour plus d'informations sur la définition de ces propriétés dans le concepteur SSIS, cliquez sur la rubrique suivante :

Ressources externes

Icône Integration Services (petite) Rester à jour avec Integration Services

Pour obtenir les derniers téléchargements, articles, exemples et vidéos de Microsoft, ainsi que des solutions sélectionnées par la communauté, visitez la page Integration Services sur MSDN ou TechNet :

Pour recevoir une notification automatique de ces mises à jour, abonnez-vous aux flux RSS disponibles sur la page.