Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Managed Instance
Tworzy funkcję agregatora zdefiniowaną przez użytkownika, której implementacja jest zdefiniowana w klasie asembla w ramach .NET Framework. Aby Database Engine powiązał funkcję agregatora z implementacją, assembler .NET Framework zawierający implementację musi zostać najpierw przesłany do instancji SQL Server za pomocą CREATE ASSEMBLY instrukcji.
Transact-SQL konwencje składni
Składnia
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 }
Arguments
schema_name
To nazwa schematu, do którego należy funkcja agregatu zdefiniowana przez użytkownika.
aggregate_name
To nazwa funkcji agregacyjnej, którą chcesz stworzyć.
@
param_name
Jeden lub więcej parametrów w agregcie zdefiniowanym przez użytkownika. Wartość parametru musi być dostarczona przez użytkownika podczas wykonywania funkcji agregatu. Określ nazwę parametru, używając znaku "at" (@) jako pierwszego znaku. Nazwa parametru musi być zgodna z regułami identyfikatorów. Parametry są lokalne dla funkcji.
system_scalar_type
Czy którykolwiek z skalarnych typów danych systemu SQL Server przechowuje wartość parametru wejściowego lub zwracanej wartości? Wszystkie typy danych skalarnych mogą być używane jako parametr dla agregatu zdefiniowanego przez użytkownika, z wyjątkiem tekstu, ntextu i obrazu. Nie można określić typów nieskalarnych, takich jak kursor i tabela.
udt_schema_name
To nazwa schematu, do którego należy użytkownik CLR typu zdefiniowanego przez użytkownika. Jeśli nie jest to określone, Database Engine odniesienia udt_type_name w następującej kolejności:
Natywna przestrzeń nazw typów SQL.
Domyślny schemat bieżącego użytkownika w bieżącej bazie danych.
Schemat dbo w bieżącej bazie danych.
udt_type_name
To nazwa użytkownika zdefiniowanego przez użytkownika typu CLR już utworzonego w aktualnej bazie danych. Jeśli udt_schema_name nie jest określona, zakłada SQL Server typ należy do schematu aktualnego użytkownika.
assembly_name [ .class_name ]
Określa asemble, który ma się wiązać z funkcją agregatora zdefiniowaną przez użytkownika, a opcjonalnie nazwę schematu, do którego należy asembler, oraz nazwę klasy w asemblerze, która implementuje agregat zdefiniowany przez użytkownika. Asembl musi już zostać utworzony w bazie danych za pomocą CREATE ASSEMBLY instrukcji.
class_name musi być ważnym identyfikatorem SQL Server i odpowiadać nazwie klasy istniejącej w asemblerze.
class_name może być nazwą kwalifikowaną dla przestrzeni nazw, jeśli język programowania używany do zapisu klasy używa przestrzeni nazw, takich jak C#. Jeśli class_name nie jest określone, SQL Server zakłada, że jest to to samo co aggregate_name.
Remarks
Domyślnie możliwość uruchamiania kodu CLR przez program SQL Server jest wyłączona. Możesz tworzyć, modyfikować i usuwać obiekty bazy danych, które odwołują się do zarządzanych modułów kodu, ale kod w tych modułach nie uruchomi się w instancji SQL Server, chyba że opcja CLR jest włączona przez sp_configure.
Klasa asemblera, do którego się odwołuje assembly_name oraz jej metody, powinny spełniać wszystkie wymagania implementacji funkcji agregującej zdefiniowanej przez użytkownika w instancji SQL Server. Więcej informacji można znaleźć w artykule CLR User-Defined Agregaty.
Permissions
Wymaga CREATE AGGREGATE zezwolenia oraz REFERENCJI na asemblerze, które jest określone w klauzuli EXTERNAL NAME.
Examples
Poniższy przykład zakłada, że skompilowana jest przykładowa aplikacja StringUtilities.csproj. Więcej informacji można znaleźć w Przykładzie funkcji narzędzi łańcuchowych.
Przykład tworzy agregat Concatenate. Przed utworzeniem agregatu, asembl StringUtilities.dll jest rejestrowany w lokalnej bazie danych.
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