Вызов хранимых процедур
Применимо к: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
Хранимые процедуры можно вызывать на сервере или из клиентского приложения. В любом случае хранимые процедуры всегда выполняются на сервере либо в контексте сервера, либо в контексте базы данных. Для выполнения хранимой процедуры не нужны специальные разрешения. После того как хранимая процедура добавлена сборкой к контексту сервера или базы данных, любой пользователь может выполнить эту хранимую процедуру, если только роль для этого пользователя разрешает действия, выполняемые этой хранимой процедурой.
Вызов хранимой процедуры в многомерном выражении осуществляется аналогично вызову внутренней функции многомерного выражения. Для хранимой процедуры, не принимающей параметров, используется имя процедуры и пустая пара скобок, как показано ниже:
MyStoredProcedure()
Если хранимая процедура принимает один или несколько параметров, то параметры вводятся по порядку и разделены запятыми. В следующем примере демонстрируется образец хранимой процедуры с тремя параметрами:
MyStoredProcedure("Parameter1", 2, 800)
Вызов хранимых процедур в запросах многомерных выражений
Во всех запросах многомерных выражений хранимая процедура должна возвращать синтаксически корректный тип, требуемый многомерным выражением. Если хранимая процедура не возвращает корректный тип, то возникает ошибка многомерного выражения. В следующем примере демонстрируются хранимые процедуры, возвращающие набор, элемент и результат математической операции.
Возврат набора
В следующих примерах реализуется хранимая процедура, имеющая имя MySproc, которая возвращает набор. В первом примере MySproc возвращает набор непосредственно в выражении SELECT. В следующих двух примерах MySproc возвращает набор в качестве аргумента для функций Crossjoin и 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
Возврат элемента
В следующем примере показана функция MySproc, возвращающая элемент:
SELECT Descendants(MySproc(a,b,c),3) ON 0 FROM Sales
Возврат результата математической операции
SELECT Country.Members on 0, MySproc(Measures.Sales) ON 1 FROM Sales
Вызов хранимых процедур с использованием инструкции Call
Хранимые процедуры можно вызывать вне контекста запроса многомерных выражений с помощью инструкции многомерного вызова .
Этот метод можно использовать либо для создания экземпляра побочных эффектов хранимого запроса, либо для получения приложением результатов хранимого запроса. Обычно оператор Call используется для использования объектов AMO для выполнения административных функций, которые не имеют возвращаемого результата. Например, следующая команда вызывает хранимую процедуру:
Call MyStoredProcedure(a,b,c)
Единственным поддерживаемым типом, возвращаемым хранимой процедурой в инструкции Call , является набор строк. Упорядочивание для набора строк определяется XML для аналитики. Если хранимая процедура в операторе Call возвращает любой другой тип, она игнорируется и не возвращается в XML вызывающему приложению. Дополнительные сведения о наборах строк XML для аналитики см. в разделе «Наборы строк схемы XML для аналитики».
Если хранимая процедура возвращает набор строк .NET, SQL Server Analysis Services преобразует результат на сервере в набор строк XML для анализа. Набор строк XML для анализа всегда возвращается хранимой процедурой в функции Call . Если набор данных содержит элементы, которые нельзя выразить в наборе строк XML для аналитики, то происходит сбой.
Процедуры, возвращающие значения void (например, подпрограммы языка Visual Basic), также могут использоваться с ключевым словом CALL. Например, если необходимо использовать функцию MyVoidFunction() в инструкции многомерного выражения, то нужно применить следующий синтаксис:
CALL(MyVoidFunction)
См. также:
Управление сборками многомерной модели
Определение хранимых процедур