Llamar a procedimientos almacenados

Se aplica a: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Se puede llamar a los procedimientos almacenados desde el servidor o desde la aplicación cliente. En cualquier caso, los procedimientos almacenados siempre se ejecutan en el servidor, ya sea en el contexto del servidor o de una base de datos. No se requieren permisos específicos para ejecutar un procedimiento almacenado. Cuando un ensamblado agrega un procedimiento almacenado al contexto del servidor o de la base de datos, cualquier usuario puede ejecutarlo, siempre que el rol del usuario permita las acciones que efectúa el procedimiento almacenado.

La llamada a un procedimiento almacenado en MDX se realiza del mismo modo que la llamada a una función MDX intrínseca. Para un procedimiento almacenado que no toma parámetros, se utilizan el nombre del procedimiento y unos paréntesis vacíos, como se muestra a continuación:

MyStoredProcedure()  

Si el procedimiento almacenado toma uno o más parámetros, éstos se proporcionan por orden, separados por comas. En el siguiente ejemplo se muestra un ejemplo de procedimiento almacenado con tres parámetros:

MyStoredProcedure("Parameter1", 2, 800)  

Llamar a procedimientos almacenados en consultas MDX

En todas las consultas MDX, el procedimiento almacenado debe devolver el tipo sintácticamente correcto que requiere una expresión MDX. Si un procedimiento almacenado no devuelve el tipo correcto, se produce un error de MDX. En los siguientes ejemplos se muestran procedimientos almacenados que devuelven un conjunto, un miembro y el resultado de una operación matemática.

Devolver un conjunto

En los siguientes ejemplos se implementa un procedimiento almacenado llamado MySproc, que devuelve un conjunto. En el primer ejemplo, MySproc devuelve el conjunto directamente en la expresión SELECT. En los dos ejemplos siguientes, MySproc devuelve el conjunto como argumento de las funciones Crossjoin y 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  

Devolver un miembro

En el siguiente ejemplo se muestra una función MySproc que devuelve un miembro:

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

Devolver el resultado de una operación matemática

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

Llamar a procedimientos almacenados con la instrucción Call

Se puede llamar a procedimientos almacenados fuera del contexto de una consulta MDX mediante la instrucción MDX Call .

Utilice este método para crear instancias de los efectos secundarios de una consulta almacenada o para que la aplicación obtenga los resultados de una consulta almacenada. Un uso común de la instrucción Call sería usar Objetos de administración de análisis (AMO) para realizar funciones administrativas que no tienen un resultado devuelto. Por ejemplo, el comando siguiente llama a un procedimiento almacenado:

Call MyStoredProcedure(a,b,c)  

El único tipo admitido devuelto del procedimiento almacenado en una instrucción Call es un conjunto de filas. La serialización para un conjunto de filas se define mediante XML for Analysis. Si un procedimiento almacenado en una instrucción Call devuelve cualquier otro tipo, se omite y no se devuelve en XML a la aplicación que realiza la llamada. Para obtener más información acerca de los conjuntos de filas de XML for Analysis, vea el tema sobre conjuntos de filas del esquema de XML for Analysis.

Si un procedimiento almacenado devuelve un conjunto de filas de .NET, SQL Server Analysis Services convierte el resultado en el servidor en un conjunto de filas XML for Analysis. El conjunto de filas XML for Analysis siempre lo devuelve un procedimiento almacenado en la función Call . Si un conjunto de datos contiene características que no se pueden expresar en el conjunto de filas de XML for Analysis, se genera un error.

También se pueden utilizar procedimientos que devuelven valores nulos (por ejemplo, subrutinas de Visual Basic) con la palabra clave CALL. Por ejemplo, si desea utilizar la función MyVoidFunction() en una instrucción MDX, se utilizaría la siguiente sintaxis:

CALL(MyVoidFunction)  

Consulte también

Administración de ensamblados de modelos multidimensionales
Definición de procedimientos almacenados