Определяемые пользователем функции и хранимые процедуры
с помощью объектов ADOMD.NET server можно создать определяемую пользователем функцию (UDF) или хранимые процедуры для Microsoft SQL Server Analysis Services, которые взаимодействуют с метаданными и данными с сервера. Эти внутрипроцессные методы вызываются при помощи инструкций на языке MDX или DMX для предоставления дополнительных функциональных возможностей без задержек, связанных с обменом данными по сети.
Примеры определяемых пользователем функций
Определяемая пользователем функция — это метод, который можно вызывать в контексте инструкции MDX или DMX; он может принимать любое количество параметров и возвращать данные любого типа.
Определяемая пользователем функция, созданная при помощи языка MDX, похожа на функцию, созданную на языке DMX. Основное отличие состоит в том, что определенные свойства объекта Microsoft. AnalysisServices. того объектная AdomdServer. Context, такие как свойства Microsoft. AnalysisServices. того объектная AdomdServer. Context. CurrentCube и Microsoft. AnalysisServices. того объектная AdomdServer. Context. Куррентминингмодел, доступны только для одного языка сценариев или другого.
Следующие примеры демонстрируют использование определяемой пользователем функции для возврата описания узла, фильтрации кортежей и применения фильтра к кортежу.
Возврат описания узла
В следующем примере создается определяемая пользователем функция, которая возвращает описание указанного узла. В этой определяемой пользователем функции используется текущий контекст, в котором она выполняется, а также предложение FROM языка DMX для извлечения узла из текущей модели интеллектуального анализа данных.
public string GetNodeDescription(string nodeUniqueName)
После развертывания описанный выше пример определяемой пользователем функции можно вызвать следующей инструкцией DMX, которая извлекает наиболее вероятный узел прогнозирования. В описании приводятся сведения, характеризующие условия, из которых состоит узел прогнозирования.
select Cluster(), SampleAssembly.GetNodeDescription( PredictNodeId(Cluster()) ) FROM [Customer Clusters]
Возврат кортежей
В следующем примере показано, как получить набор и количество возвращаемых значений, а также случайным образом извлечь кортежи из набора, возвращая конечное подмножество.
public Set RandomSample(Set set, int returnCount) < //Return the original set if there are fewer tuples //in the set than the number requested. if (set.Tuples.Count i--; //Stop the loop if we have enough tuples. if (returnCount == 0) break; > return returnSet.ToSet(); >
Описанная выше функция вызывается в следующем примере многомерного выражения (MDX). В этом примере многомерных выражений из базы данных Adventure Works извлекаются пять случайных состояний или провинции.
SELECT SampleAssembly.RandomSample([Geography].[State-Province].Members, 5) on ROWS, [Date].[Calendar].[Calendar Year] on COLUMNS FROM [Adventure Works] WHERE [Measures].[Reseller Freight Cost]
Применение фильтра к кортежу
В следующем примере создается определяемая пользователем функция, которая принимает набор и при помощи объекта Expression применяет фильтр к каждому кортежу в наборе. В возвращаемый набор будут добавлены все кортежи, соответствующие фильтру.
public static Set FilterSet(Set set, String filterExpression) < Expression expr = new Expression(filterExpression); SetBuilder resultSetBuilder = new SetBuilder(); foreach (Tuple tuple in set) < if ((bool)(expr.Calculate(tuple))) < resultSetBuilder.Add(tuple); >> return resultSetBuilder.ToSet(); >
Описанная выше функция вызывается в следующем примере многомерного выражения, где набор фильтруется по городам, название которых начинается с «А».
Select Measures.Members on Rows, SampleAssembly.FilterSet([Customer].[Customer Geography].[City], "[Customer].[Customer Geography].[City].CurrentMember.Name < 'B'") on Columns From [Adventure Works]
Пример хранимой процедуры
В следующем примере показано, как в хранимой процедуре, основанной на многомерном выражении, по мере необходимости используется объект AMO для создания секций для узла «Продажи через Интернет».
public static void CreateInternetSalesMeasureGroupPartitions() < //Check the current state of the data warehouse and //create partitions with AMO if necessary #region Retrieve order date of last sales transaction // Open a connection to the data warehouse // TODO: Change the first string parameter to reflect the right server\instance. SqlConnection conn = new SqlConnection(string.Format("data source=;initial catalog=;Integrated Security=SSPI", "server\\instance", Context.CurrentDatabaseName)); conn.Open(); // Create a command SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; // Get the order date key of the last internet sale int lastInternetSaleDateKey = 0; cmd.CommandText = "select max(OrderDateKey) from FactInternetSales"; lastInternetSaleDateKey = (int)cmd.ExecuteScalar(); // Get the order date key of the last reseller sale int lastResellerSaleDateKey = 0; cmd.CommandText = "select max(OrderDateKey) from FactResellerSales"; lastResellerSaleDateKey = (int)cmd.ExecuteScalar(); #endregion #region Create partitions // Connect to the calling session Server svr = new Server(); svr.Connect("*"); // Get the Adventure Works cube Database db = svr.Databases.GetByName(Context.CurrentDatabaseName); Cube cube = db.Cubes[0]; MeasureGroup mg; int maxOrderDateKey; mg = cube.MeasureGroups.GetByName("Internet Sales"); maxOrderDateKey = 0; foreach (Partition part in mg.Partitions) < maxOrderDateKey = Math.Max(maxOrderDateKey, Convert.ToInt32( part.Annotations.Find("LastOrderDateKey").Value.Value, System.Globalization.CultureInfo.InvariantCulture)); >if (maxOrderDateKey < lastInternetSaleDateKey) < Partition part = mg.Partitions.Add("Internet_Sales_" + lastInternetSaleDateKey); part.StorageMode = StorageMode.Molap; part.Source = new QueryBinding(db.DataSources[0].ID, "SELECT * FROM [dbo].[FactInternetSales] WHERE OrderDateKey >'" + maxOrderDateKey + "' and OrderDateKey svr.Disconnect(); #endregion >
Обратная связь
Были ли сведения на этой странице полезными?
В ms sql server чем отличаются хранимые процедуры и функции
Хранимые процедуры и функции, определенные пользователем
В этом разделе вводятся описания пакетов и подпрограмм. Пакеты являются последовательностью операторов Transact-SQL и процедурных расширений. Подпрограммы могут быть либо хранимыми процедурами, либо функциями, определенными пользователем (User Defined Function, UDF). В начале главы вводятся все процедурные расширения, поддерживаемые Database Engine. После этого процедурные расширения используются вместе с операторами Transact-SQL, чтобы продемонстрировать, как могут быть реализованы пакеты. Пакет может быть сохранен как объект базы данных в виде хранимой процедуры или UDF. Одни процедуры написаны пользователями, другие предоставляются корпорацией Microsoft, они называются системными хранимыми процедурами. В отличие от пользовательских хранимых процедур функции, написанные пользователем, возвращают вызвавшей программе некоторое значение. Все подпрограммы могут быть написаны либо на Transact-SQL, либо на любом языке программирования, таком как С# или Visual Basic.
Хранимые процедуры и CLR
В версиях, предшествующих SQL Server 2005, вы могли использовать для создания хранимых процедур только операторы Transact-SQL. SQL Server 2005 вводит новую возможность Common Language Runtime (CLR), которая позволяет вам разрабатывать различные объекты базы данных (хранимые процедуры, функции, определенные пользователем, триггеры, определенные пользователем агрегаты и определенные пользователем типы) с помощью С# и Visual Basic. CLR также позволяет выполнять эти объекты, используя общую систему выполнения. В примере 8.9 показано, как вы можете разрешить использование CLR. Для реализации, компиляции и сохранения процедур при использовании CLR вы должны выполнить следующие четыре шага в указанном порядке: 1. Напишите хранимую процедуру на языке С# (или…
Чем отличаются функции от хранимых процедур в T-SQL (Microsoft SQL Server)
Приветствую всех посетителей сайта Info-Comp.ru! Сегодня мы с Вами поговорим о том, чем же отличаются функции от хранимых процедур в Microsoft SQL Server, и для наглядности сформируем итоговую таблицу отличий.
Функции и хранимые процедуры T-SQL
В Microsoft SQL Server существуют такие объекты базы данных, как функции и хранимые процедуры, которые используются для хранения неких уже реализованных алгоритмов на языке T-SQL.
Примечание! В данном материале речь идет о пользовательских функциях и хранимых процедурах, не о системных, которые уже реализованы в SQL Server, а о тех, которые создаем мы с Вами, т.е. программисты T-SQL.
Функции и хранимые процедуры используются в языке T-SQL для реализации бизнес логики, упрощения сложных SQL запросов, а также для написания различных инструкций администрирования баз данных и сервера, которые периодически необходимо выполнять.
Иными словами, функции и хранимые процедуры – это своего рода мини программы внутри базы данных, они помогают нам реализовывать нужные нам алгоритмы и хранить их в базе данных. Кроме этого, функции и хранимые процедуры позволяют декомпозировать одну глобальную задачу на несколько мелких, тем самым упрощая решение этой задачи и дальнейшее сопровождение этого решения, так как весь алгоритм становится модульным и более гибким.
У начинающих может возникнуть вопрос – а чем отличаются функции от процедур? Или это одно и то же?
Конечно же, это не одно и то же, и между этими понятиями, в контексте языка T-SQL, есть нескольких ключевых отличный.
Отличия функций от хранимых процедур в T-SQL
Давайте перейдем к рассмотрению основных отличный функций от хранимых процедур, а чтобы было более наглядно, сделаем это в виде таблицы.
Функция
Хранимая процедура
На сегодня это все, надеюсь, материал был Вам полезен, пока!
Системные хранимые процедуры (Transact-SQL)
В SQL Server многие административные и информационные действия можно выполнять с помощью системных хранимых процедур. Системные хранимые процедуры объединяются в категории, перечисленные в следующей таблице.
В этом разделе
| Категория | Description |
|---|---|
| Активные хранимые процедуры георепликации | Используется для управления конфигурациями активной георепликации в базе данных SQL Azure |
| Хранимые процедуры каталога | Используются для реализации функций словаря данных ODBC и изоляции ODBC-приложений от изменений во внутренних системных таблицах. |
| Хранимые процедуры отслеживания измененных данных | Используются для включения, отключения или подготовки отчетов об объектах системы отслеживания измененных данных. |
| Хранимые процедуры курсора | Используются для реализации переменной функциональности курсоров. |
| Хранимые процедуры сборщика данных | Используется для работы со сборщиком данных и следующими компонентами: наборами элементов сбора, элементами коллекций и типами коллекций. |
| Хранимые процедуры ядра СУБД | Используется для общего обслуживания ядра СУБД SQL Server. |
| Хранимые процедуры Database Mail | Используется для выполнения операций электронной почты из экземпляра SQL Server. |
| Хранимые процедуры плана обслуживания базы данных | Используются для выполнения основных задач, необходимых для управления производительностью базы данных. |
| Хранимые процедуры распределенных запросов | Используются для реализации распределенных запросов и управления ими. |
| Хранимые процедуры FILESTREAM и FileTable | Используется для настройки и управления функциями FILESTREAM и FileTable. |
| Хранимые процедуры правил брандмауэра (база данных SQL Azure) | Используется для настройки брандмауэра базы данных SQL Azure. |
| Хранимые процедуры полнотекстового поиска | Используются для создания полнотекстовых индексов и запросов к ним. |
| Общие расширенные хранимые процедуры | Используется для предоставления интерфейса от экземпляра SQL Server к внешним программам для различных действий обслуживания. |
| Хранимые процедуры доставки журналов | Используются для создания, изменения и отслеживания конфигураций доставки журналов. |
| Хранимые процедуры хранилища данных управления | Используется для настройки хранилища данных управления. |
| Хранимая процедура MSDTC | Используется для сброса журнала координатора распределенных транзакций Майкрософт (MSDTC) или просмотра статистики MSDTC. |
| Хранимые процедуры OLE Automation | Используется для включения стандартных объектов автоматизации для использования в стандартном пакете Transact-SQL. |
| Хранимые процедуры управления на основе политик | Используется для управления на основе политики. |
| PolyBase stored procedures (Хранимые процедуры PolyBase) | Добавьте или удалите компьютер из группы масштабирования PolyBase. |
| Хранимые процедуры хранилища запросов | Используется для настройки производительности. |
| Хранимые процедуры репликации | Используются для управления репликацией. |
| Хранимые процедуры безопасности | Используются для управления безопасностью. |
| Хранимые процедуры резервного копирования моментальных снимков | Используется для удаления резервной копии FILE_SNAPSHOT вместе со всеми его моментальными снимками или для удаления отдельного моментального снимка файла резервной копии. |
| Хранимые процедуры пространственного индекса | Используется для анализа и повышения производительности индексирования пространственных индексов. |
| Хранимые процедуры агента SQL Server | Используется SQL Server Profiler для мониторинга производительности и активности. |
| Хранимые процедуры SQL Server Profiler | Используется агентом SQL Server для управления запланированными и событиями. |
| Хранимые процедуры Stretch Database | Используется для управления растянутыми базами данных. |
| Хранимые процедуры временных таблиц | Использование темпоральных таблиц |
| Хранимые процедуры XML | Используются для работы с текстом в формате XML. |
Если не описано в конкретном случае, все системные хранимые процедуры возвращают значение 0 , указывающее на успешность. Для сигнализации об ошибке возвращается ненулевое значение.
Службу Stretch Database не рекомендуется использовать в SQL Server 2022 (16.x). В будущей версии Microsoft SQL Server этот компонент будет удален. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.
Системные хранимые процедуры API
Пользователи, использующие SQL Server Profiler для приложений ADO, OLE DB и ODBC, могут заметить эти приложения с помощью системных хранимых процедур, которые не рассматриваются в справочнике по Transact-SQL. Эти хранимые процедуры используются поставщиком OLE DB собственного клиента SQL Server и драйвером ODBC собственного клиента SQL Server для реализации функциональных возможностей API базы данных. Эти хранимые процедуры — это просто механизм, который использует поставщик или драйвер для обмена запросами пользователей с экземпляром SQL Server. Они предназначены только для внутреннего использования поставщиком или драйвером. Явное их вызов из приложения на основе SQL Server не поддерживается.
Хранимые sp_createorphan процедуры используются для обработки ntext, текста и изображений ODBC. sp_droporphans
Хранимая sp_reset_connection процедура используется SQL Server для поддержки удаленных вызовов хранимой процедуры в транзакции. Кроме того, эта хранимая процедура инициирует события Audit Login и Audit Logout при повторном использовании соединения из пула соединений.
Системные хранимые процедуры в следующих таблицах используются только в экземпляре SQL Server или через клиентские API и не предназначены для общего использования клиентов. Они подвергаются изменению и совместимости не гарантируются.
Описаны следующие хранимые процедуры:
