Поделиться через


CREATE AGGREGATE (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

Создает определяемую пользователем агрегатную функцию, реализация которой определена в классе сборки платформы .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 }  
  

Аргументы

schema_name
Имя схемы, которой принадлежит определяемая пользователем агрегатная функция.

aggregate_name
Имя создаваемой агрегатной функции.

@ param_name
Один или несколько параметров в определяемой пользователем статистической функции. Значение параметра должно быть задано пользователем при выполнении агрегатной функции. Определяет имя параметра, используя знак @ как первый символ. Имя параметра должно соответствовать правилам для идентификаторов. Параметры являются локальными для функции.

system_scalar_type
Любой из системных скалярных типов данных SQL Server хранит значение входного параметра или возвращаемого значения. Для определяемого пользователем статистического выражения в качестве параметра могут использоваться все скалярные типы данных, кроме text, ntext и image. Нельзя использовать нескалярные типы, такие как cursor и table.

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.

Замечания

По умолчанию возможность выполнения кода СРЕДЫ CLR в SQL Server отключена. Можно создавать, изменять и удалять объекты базы данных, которые ссылаются на модули управляемого кода, но код в этих модулях не будет выполняться в экземпляре SQL Server, пока параметр clr enabled не будет задан с помощью sp_configure.

Класс сборки, указанной в аргументе assembly_name, и его методы должны соответствовать всем требованиям к реализации определяемых пользователем агрегатных функций в экземпляре SQL Server. Дополнительные сведения см. в статье Пользовательские агрегатные функции среды CLR.

Разрешения

Требует разрешения CREATE AGGREGATE и разрешения REFERENCES для сборки, указанной в предложении EXTERNAL NAME.

Примеры

В следующем примере предполагается, что образец приложения StringUtilities.csproj скомпилирован. Дополнительные сведения см. в разделе Пример функций программы работы со строками.

Пример создает статистическое выражение Concatenate. Перед созданием статистического выражения в локальной базе данных регистрируется сборка StringUtilities.dll.

USE AdventureWorks2022;  
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)