BUAT AGREGAT (Transact-SQL)
Berlaku untuk: SQL Server Azure 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.
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk