Partilhar via


Chamando procedimentos armazenados

Os procedimentos armazenados podem ser chamados no servidor ou no aplicativo cliente. Em ambos os casos, os procedimentos armazenados sempre são executados no servidor, seja no contexto do servidor ou de um banco de dados. Não há permissões especiais necessárias para executar um procedimento armazenado. Depois que um procedimento armazenado é adicionado por um assembly ao contexto de servidor ou banco de dados, qualquer usuário pode executar o procedimento armazenado desde que a função do usuário permita as ações executadas pelo procedimento armazenado.

Chamar um procedimento armazenado no MDX é feito da mesma maneira que chamar uma função MDX intrínseca. Para um procedimento armazenado que não usa parâmetros, o nome do procedimento e um par de parênteses vazios são usados, conforme mostrado aqui:

MyStoredProcedure()  

Se o procedimento armazenado usa um ou mais parâmetros, os parâmetros são fornecidos, em ordem, separados por vírgulas. O exemplo a seguir demonstra um procedimento armazenado de exemplo com três parâmetros:

MyStoredProcedure("Parameter1", 2, 800)  

Chamando procedimentos armazenados em consultas MDX

Em todas as consultas MDX, o procedimento armazenado deve retornar o tipo sintaticamente correto exigido por uma expressão MDX. Se um procedimento armazenado não retornar o tipo correto, ocorrerá um erro MDX. Os exemplos a seguir demonstram procedimentos armazenados que retornam um conjunto, um membro e o resultado de uma operação matemática.

Retornando um conjunto

Os exemplos a seguir implementam um procedimento armazenado, chamado MySproc, que retorna um conjunto. No primeiro exemplo, MySproc retorna o conjunto diretamente na expressão SELECT. Nos dois segundos exemplos, MySproc retorna o conjunto como um argumento para as funções Crossjoin e 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  

Retornando um membro

O exemplo a seguir mostra uma função MySproc que retorna um membro:

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

Retornando o resultado de uma operação matemática

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

Chamando procedimentos armazenados com a instrução de chamada

Os procedimentos armazenados podem ser chamados fora do contexto de uma consulta MDX usando a instrução MDX Call .

Você pode usar esse método para instanciar os efeitos colaterais de uma consulta armazenada ou para o aplicativo obter os resultados de uma consulta armazenada. Um uso comum da Call instrução seria usar AMO (Objetos de Gerenciamento de Análise) para executar funções administrativas que não têm um resultado de retorno. Por exemplo, o comando a seguir chama um procedimento armazenado:

Call MyStoredProcedure(a,b,c)  

O único tipo com suporte retornado do procedimento armazenado em uma Call instrução é um conjunto de linhas. A serialização de um conjunto de linhas é definida por XML para Análise. Se um procedimento armazenado em uma Call instrução retornar qualquer outro tipo, ele será ignorado e não será retornado em XML para o aplicativo de chamada. Para obter mais informações sobre conjuntos de linhas XML for Analysis, consulte XML for Analysis Schema Rowsets.

Se um procedimento armazenado retornar um conjunto de linhas .NET, o Analysis Services converterá o resultado no servidor em um conjunto de linhas XML for Analysis. O conjunto de linhas XML for Analysis sempre é retornado por um procedimento armazenado na Call função. Se um conjunto de dados contiver recursos que não podem ser expressos no conjunto de linhas XML for Analysis, ocorrerá uma falha.

Procedimentos que retornam valores nulos (por exemplo, sub-rotinas no Visual Basic) também podem ser empregados com a palavra-chave CALL. Se, por exemplo, você quisesse usar a função MyVoidFunction() em uma instrução MDX, a seguinte sintaxe seria empregada:

CALL(MyVoidFunction)  

Consulte Também

Gerenciamento de assemblies de modelo multidimensional
Definindo procedimentos armazenados