CREATE AGGREGATE (Transact-SQL) — SQL Server
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
Применимо к:
Создает определяемую пользователем агрегатную функцию, реализация которой определена в классе сборки платформы . NET Framework. Для привязки агрегатной функции к ее реализации ядром СУБД, содержащая реализацию сборка платформы .NET Framework должна быть сначала загружена в экземпляр SQL Server с помощью инструкции CREATE ASSEMBLY.
Соглашения о синтаксисе Transact-SQL
Синтаксис
CREATE AGGREGATE [ schema_name . ] aggregate_name (@param_name <input_sqltype> [ ,...n ] ) RETURNS <return_sqltype> EXTERNAL NAME assembly_name [ .class_name ] <input_sqltype> ::= system_scalar_type | { [ udt_schema_name. ] udt_type_name } <return_sqltype> ::= system_scalar_type | { [ udt_schema_name. ] udt_type_name }
Примечание
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
schema_name
Имя схемы, которой принадлежит определяемая пользователем агрегатная функция.
aggregate_name
Имя создаваемой агрегатной функции.
@param_name
Один или несколько параметров в определяемой пользователем статистической функции. Значение параметра должно быть задано пользователем при выполнении агрегатной функции. Определяет имя параметра, используя знак @ как первый символ. Имя параметра должно соответствовать правилам для идентификаторов. Параметры являются локальными для функции.
system_scalar_type
Любой из системных скалярных типов данных SQL Server хранит значение входного параметра или возвращаемого значения. Для определяемого пользователем статистического выражения в качестве параметра могут использоваться все скалярные типы данных, кроме
udt_schema_name
Имя схемы, к которой относится пользовательский тип данных среды CLR. Если не указано иное, ядро СУБД ссылается на аргумент udt_type_name в следующем порядке:
собственное пространство имен типов SQL;
в установленной по умолчанию для текущего пользователя схеме в текущей базе данных;
Схема dbo в текущей базе данных.
udt_type_name
Название пользовательского типа среды CLR, созданного в текущей базе данных. Если аргумент udt_schema_name не указан, SQL Server предполагает, что тип принадлежит к схеме текущего пользователя.
assembly_name [ .class_name ]
Указывает сборку, с которой связывается определяемая пользователем агрегатная функция и, при необходимости, имя схемы, к которой принадлежит сборка, и имя класса в сборке, реализующего определяемую пользователем статистическую функцию. Сборка уже должна быть создана в базе данных с помощью инструкции CREATE ASSEMBLY. class_name должен быть допустимым идентификатором SQL Server и соответствовать имени класса, существующего в сборке. Аргумент class_name может быть именем, указанным в пространстве имен, если в языке программирования, использовавшемся для написания класса, применяются пространства имен, например C#. Если аргумент class_name не задан, SQL Server считает, что это соответствует аргументу aggregate_name.
По умолчанию возможность SQL Server запускать код CLR отключена. Можно создавать, изменять и удалять объекты базы данных, которые ссылаются на модули управляемого кода, но код в этих модулях не будет выполняться в экземпляре SQL Server, пока параметр clr enabled не будет задан с помощью sp_configure.
Класс сборки, указанной в аргументе assembly_name, и его методы должны соответствовать всем требованиям к реализации определяемых пользователем агрегатных функций в экземпляре SQL Server. Дополнительные сведения см. в статье Пользовательские агрегатные функции среды CLR.
Разрешения
Требует разрешения CREATE AGGREGATE и разрешения REFERENCES для сборки, указанной в предложении EXTERNAL NAME.
Примеры
В следующем примере предполагается, что образец приложения StringUtilities.csproj скомпилирован. Дополнительные сведения см. в разделе Пример функций программы работы со строками.
Пример создает статистическое выражение Concatenate
.
StringUtilities.dll
.USE AdventureWorks2012; GO DECLARE @SamplesPath nvarchar(1024) -- You may have to modify the value of the this variable if you have --installed the sample some location other than the default location. SELECT @SamplesPath = REPLACE(physical_name, 'Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\master.mdf', 'Microsoft SQL Server\130\Samples\Engine\Programmability\CLR\') FROM master.sys.database_files WHERE name = 'master'; CREATE ASSEMBLY StringUtilities FROM @SamplesPath + 'StringUtilities\CS\StringUtilities\bin\debug\StringUtilities.dll' WITH PERMISSION_SET=SAFE; GO CREATE AGGREGATE Concatenate(@input nvarchar(4000)) RETURNS nvarchar(4000) EXTERNAL NAME [StringUtilities].[Microsoft.Samples.SqlServer.Concatenate]; GO
См. также
DROP AGGREGATE (Transact-SQL)
СОЗДАТЬ АГРЕГАТ (Transact-SQL) — SQL Server
Редактировать
Твиттер LinkedIn Фейсбук Электронная почта
- Статья
Применяется к: SQL Server Azure SQL Управляемый экземпляр
Создает определяемую пользователем агрегатную функцию, реализация которой определяется в классе сборки в .NET Framework. Чтобы ядро СУБД могло связать агрегатную функцию с ее реализацией, сборка .NET Framework, содержащая реализацию, должна быть сначала загружена в экземпляр SQL Server с помощью инструкции CREATE ASSEMBLY.
Соглашения о синтаксисе Transact-SQL
Синтаксис
СОЗДАТЬ ОБЪЕДИНЕНИЕ [ имя_схемы . ] совокупное_имя (@param_name[ ,... п ] ) ВОЗВРАТ ВНЕШНЕЕ ИМЯ имя_сборки [ .имя_класса ] ::= системный_скалярный_тип | { [ имя_схемы_udt. ] udt_type_name } ::= системный_скалярный_тип | { [ имя_схемы_udt. ] udt_type_name }
Примечание
Чтобы просмотреть синтаксис Transact-SQL для SQL Server 2014 и более ранних версий, см. документацию по предыдущим версиям.
Аргументы
имя_схемы
Имя схемы, к которой принадлежит определяемая пользователем агрегатная функция.
aggregate_name
Имя агрегатной функции, которую вы хотите создать.
Один или несколько параметров в пользовательской совокупности. Значение параметра должно быть предоставлено пользователем при выполнении агрегатной функции. Укажите имя параметра с помощью знака «at» ( @ ) в качестве первого символа. Имя параметра должно соответствовать правилам для идентификаторов. Параметры являются локальными для функции.
system_scalar_type
Любой из системных скалярных типов данных SQL Server для хранения значения входного параметра или возвращаемого значения. Все скалярные типы данных могут использоваться в качестве параметра для определяемого пользователем агрегата, кроме text , ntext и image . Нескалярные типы, такие как курсор и таблица
udt_schema_name
Имя схемы, к которой принадлежит определяемый пользователем тип CLR. Если не указано, Компонент Database Engine ссылается на udt_type_name в следующем порядке:
Собственное пространство имен типа SQL.
Схема текущего пользователя по умолчанию в текущей базе данных.
Схема dbo в текущей базе данных.
udt_type_name
Имя определяемого пользователем типа CLR, уже созданного в текущей базе данных. Если udt_schema_name не указано, SQL Server предполагает, что тип принадлежит схеме текущего пользователя.
имя_сборки [ . имя_класса ]
Указывает сборку для привязки к пользовательской агрегатной функции и, при необходимости, имя схемы, к которой принадлежит сборка, и имя класса в сборке, реализующей определяемую пользователем агрегатную функцию.
По умолчанию возможность SQL Server запускать код CLR отключена. Вы можете создавать, изменять и удалять объекты базы данных, которые ссылаются на модули управляемого кода, но код в этих модулях не будет выполняться в экземпляре SQL Server, если параметр clr enabled не включен с помощью sp_configure.
Класс сборки, указанный в имя_сборки , и его методы должны удовлетворять всем требованиям для реализации определяемой пользователем агрегатной функции в экземпляре SQL Server. Дополнительные сведения см. в разделе Определяемые пользователем агрегаты CLR.
Разрешения
Требуется разрешение CREATE AGGREGATE, а также разрешение REFERENCES для сборки, указанной в предложении EXTERNAL NAME.
Примеры
В следующем примере предполагается, что образец приложения StringUtilities.csproj скомпилирован. Дополнительные сведения см. в разделе Пример функций String Utility.
В примере создается совокупность Объединить
. Перед созданием агрегата сборка StringUtilities.dll
регистрируется в локальной базе данных.
ИСПОЛЬЗОВАТЬ AdventureWorks2012; ИДТИ ОБЪЯВИТЬ @SamplesPath nvarchar(1024) -- Возможно, вам придется изменить значение этой переменной, если у вас есть --установил образец в место, отличное от места по умолчанию. ВЫБЕРИТЕ @SamplesPath = REPLACE (физическое_имя, 'Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\master.mdf', 'Microsoft SQL Server\130\Samples\Engine\Programmability\CLR\') ИЗ master. sys.database_files ГДЕ имя = 'мастер'; СОЗДАТЬ СБОРКУ StringUtilities ИЗ @SamplesPath + 'StringUtilities\CS\StringUtilities\bin\debug\StringUtilities.dll' С PERMISSION_SET=БЕЗОПАСНО; ИДТИ СОЗДАТЬ АГРЕГАТ Concatenate(@input nvarchar(4000)) ВОЗВРАЩАЕТ nvarchar(4000) ВНЕШНЕЕ ИМЯ [StringUtilities].[Microsoft.Samples.SqlServer.Concatenate]; ИДТИ
См. также
DROP AGGREGATE (Transact-SQL)
Создание определяемых пользователем агрегатов — SQL Server
Редактировать
Твиттер LinkedIn Фейсбук Электронная почта
- Статья
Применимо к: SQL Server 2016 (13. x) и более поздние версии
Вы можете создать объект базы данных внутри SQL Server, который запрограммирован в сборке CLR. Объекты базы данных, которые могут использовать богатую модель программирования, предоставляемую CLR, включают триггеры, хранимые процедуры, функции, агрегатные функции и типы.
Как и встроенные агрегатные функции в Transact-SQL, определяемые пользователем агрегатные функции выполняют вычисления для набора значений и возвращают одно значение.
Создание пользовательской агрегатной функции в SQL Server включает следующие шаги:
Определите пользовательскую агрегатную функцию как класс на языке, поддерживаемом Microsoft .NET Framework. Дополнительные сведения о том, как программировать пользовательские агрегаты в среде CLR, см. в разделе CLR, определяемые пользователем агрегаты. Скомпилируйте этот класс, чтобы создать сборку CLR с помощью компилятора соответствующего языка.
Зарегистрируйте сборку в SQL Server с помощью оператора CREATE ASSEMBLY.