BUAT AGREGAT (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Membuat fungsi agregat yang ditentukan pengguna yang implementasinya didefinisikan dalam kelas rakitan di .NET Framework. Agar Mesin Database mengikat fungsi agregat ke implementasinya, rakitan .NET Framework yang berisi implementasi harus terlebih dahulu diunggah ke dalam instans SQL Server dengan menggunakan pernyataan CREATE ASSEMBLY.

Konvensi sintaks transact-SQL

Sintaksis

  
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 }  
  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

schema_name
Adalah nama skema tempat fungsi agregat yang ditentukan pengguna berada.

aggregate_name
Adalah nama fungsi agregat yang ingin Anda buat.

@param_name
Satu atau beberapa parameter dalam agregat yang ditentukan pengguna. Nilai parameter harus disediakan oleh pengguna saat fungsi agregat dijalankan. Tentukan nama parameter dengan menggunakan tanda "at" (@) sebagai karakter pertama. Nama parameter harus mematuhi aturan untuk pengidentifikasi. Parameter bersifat lokal untuk fungsi.

system_scalar_type
Adalah salah satu jenis data skalar sistem SQL Server untuk menyimpan nilai parameter input atau nilai pengembalian. Semua jenis data skalar dapat digunakan sebagai parameter untuk agregat yang ditentukan pengguna, kecuali teks, ntext, dan gambar. Jenis nonskala, seperti kursor dan tabel, tidak dapat ditentukan.

udt_schema_name
Adalah nama skema tempat tipe yang ditentukan pengguna CLR berada. Jika tidak ditentukan, Mesin Database mereferensikan udt_type_name dalam urutan berikut:

  • Namespace layanan jenis SQL asli.

  • Skema default pengguna saat ini dalam database saat ini.

  • Skema dbo dalam database saat ini.

udt_type_name
Adalah nama jenis yang ditentukan pengguna CLR yang sudah dibuat dalam database saat ini. Jika udt_schema_name tidak ditentukan, SQL Server mengasumsikan jenis tersebut milik skema pengguna saat ini.

assembly_name [ . class_name ]
Menentukan rakitan untuk mengikat dengan fungsi agregat yang ditentukan pengguna dan, secara opsional, nama skema tempat assembly berada dan nama kelas dalam rakitan yang mengimplementasikan agregat yang ditentukan pengguna. Rakitan harus sudah dibuat dalam database dengan menggunakan pernyataan CREATE ASSEMBLY. class_name harus berupa pengidentifikasi SQL Server yang valid dan cocok dengan nama kelas yang ada di rakitan. class_name mungkin nama yang memenuhi syarat namespace jika bahasa pemrograman yang digunakan untuk menulis kelas menggunakan namespace layanan, seperti C#. Jika class_name tidak ditentukan, SQL Server menganggapnya sama dengan aggregate_name.

Keterangan

Secara default, kemampuan SQL Server untuk menjalankan kode CLR nonaktif. Anda dapat membuat, memodifikasi, dan menghilangkan objek database yang mereferensikan modul kode terkelola, tetapi kode dalam modul ini tidak akan berjalan dalam instans SQL Server kecuali opsi yang diaktifkan clr diaktifkan dengan menggunakan sp_configure.

Kelas rakitan yang direferensikan dalam assembly_name dan metodenya, harus memenuhi semua persyaratan untuk menerapkan fungsi agregat yang ditentukan pengguna dalam instans SQL Server. Untuk informasi selengkapnya, lihat Agregat yang Ditentukan Pengguna CLR.

Izin

Memerlukan izin CREATE AGGREGATE dan juga izin REFERENSI pada rakitan yang ditentukan dalam klausa NAMA EKSTERNAL.

Contoh

Contoh berikut mengasumsikan bahwa aplikasi sampel StringUtilities.csproj dikompilasi. Untuk informasi selengkapnya, lihat Sampel Fungsi Utilitas String.

Contoh membuat agregat Concatenate. Sebelum agregat dibuat, rakitan StringUtilities.dll terdaftar di database lokal.

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  

Lihat Juga

DROP AGGREGATE (Transact-SQL)