Partager via


Appel des procédures stockées

S’applique à : SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Les procédures stockées peuvent être appelées sur le serveur ou à partir d'une application cliente. Dans les deux cas, les procédures stockées s'exécutent toujours sur le serveur, soit dans le contexte du serveur, soit dans le contexte d'une base de données. Aucune autorisation spéciale n'est requise pour exécuter une procédure stockée. Lorsqu'une procédure stockée est ajoutée par un assembly dans le contexte du serveur ou de la base de données, tous les utilisateurs peuvent l'exécuter, à condition que leur rôle autorise les actions qu'elle effectue.

L'appel d'une procédure stockée via MDX s'effectue de la même façon que l'appel d'une fonction MDX intrinsèque. Pour une procédure stockée n'acceptant pas de paramètres, le nom de la procédure et une paire de parenthèses vide sont utilisés, comme ci-après :

MyStoredProcedure()  

Si la procédure stockée accepte un ou plusieurs paramètres, ces derniers sont fournis, dans l'ordre, séparés par des virgules. L'exemple suivant montre un exemple de procédure stockée incluant trois paramètres :

MyStoredProcedure("Parameter1", 2, 800)  

Appel de procédures stockées dans les requêtes MDX

Dans toutes les requêtes MDX, la procédure stockée doit retourner le type correct du point de vue de la syntaxe requis par une expression MDX. Si une procédure stockée ne retourne pas le type correct, une erreur MDX se produit. Les exemples suivants présentent des procédures stockées qui retournent un jeu, un membre et le résultat d'une opération mathématique.

Retour d'un jeu

Les exemples suivants implémentent une procédure stockée, nommée MySproc, qui retourne un jeu. Dans le premier exemple, MySproc retourne directement le jeu dans l'expression SELECT. Dans les deux autres exemples, MySproc retourne le jeu comme un argument pour les fonctions Crossjoin et DrilldownLevel.

SELECT MySetProcedure(a,b,c) ON 0 FROM Sales  
SELECT Crossjoin(MySetProcedure(a,b,c)) ON 0 FROM Sales  
SELECT DrilldownLevel(MySetProcedure(a,b,c)) ON 0 FROM Sales  

Retour d'un membre

L'exemple suivant montre une fonction MySproc qui retourne un membre :

SELECT Descendants(MySproc(a,b,c),3) ON 0 FROM Sales  

Retour du résultat d'une opération mathématique

SELECT Country.Members on 0, MySproc(Measures.Sales) ON 1 FROM Sales  

Appel de procédures stockées avec l'instruction Call

Les procédures stockées peuvent être appelées en dehors du contexte d’une requête MDX à l’aide de l’instruction MDX Call .

Vous pouvez utiliser cette méthode pour instancier les effets secondaires d'une requête stockée ou pour que l'application obtienne les résultats d'une requête stockée. Une utilisation courante de l’instruction Call consiste à utiliser AMO (Analysis Management Objects) pour effectuer des fonctions d’administration qui n’ont pas de résultat de retour. Par exemple, la commande suivante appelle une procédure stockée :

Call MyStoredProcedure(a,b,c)  

Le seul type pris en charge retourné par la procédure stockée dans une instruction Call est un ensemble de lignes. La sérialisation pour un ensemble de lignes est définie par XML for Analysis. Si une procédure stockée dans une instruction Call retourne un autre type, elle est ignorée et non renvoyée en XML à l’application appelante. Pour plus d'informations sur les ensembles de lignes de XML for Analysis, consultez Ensembles de lignes de schéma XML for Analysis.

Si une procédure stockée retourne un ensemble de lignes .NET, SQL Server Analysis Services convertit le résultat sur le serveur en un ensemble de lignes XML for Analysis. L’ensemble de lignes XML pour l’analyse est toujours retourné par une procédure stockée dans la fonction Call . Si un dataset contient des fonctionnalités qui ne peuvent pas être exprimées dans l'ensemble de lignes XML for Analysis, un échec se produit.

Les procédures qui retournent des valeurs void (par exemple, des sous-routines dans Visual Basic) peuvent également être employées avec le mot clé CALL. Si, par exemple, vous souhaitez utiliser la fonction MyVoidFunction() dans une instruction MDX, utilisez la syntaxe suivante :

CALL(MyVoidFunction)  

Voir aussi

Gestion des assemblys de modèles multidimensionnels
Définition de procédures stockées