Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Database SQL di Microsoft Fabric
Membuat fungsi yang ditentukan pengguna (UDF), yang merupakan rutinitas runtime bahasa Transact-SQL atau bahasa umum (CLR). Fungsi yang ditentukan pengguna menerima parameter, melakukan tindakan seperti perhitungan kompleks, dan mengembalikan hasil tindakan tersebut sebagai nilai. Nilai yang dikembalikan dapat berupa nilai skalar (tunggal) atau tabel.
Gunakan CREATE FUNCTION
untuk membuat rutinitas T-SQL yang dapat digunakan kembali yang dapat digunakan dengan cara berikut:
- Dalam pernyataan Transact-SQL seperti
SELECT
- Dalam aplikasi yang memanggil fungsi
- Dalam definisi fungsi lain yang ditentukan pengguna
- Untuk memparameterkan tampilan atau meningkatkan fungsionalitas tampilan yang diindeks
- Untuk menentukan kolom dalam tabel
- Untuk menentukan
CHECK
batasan pada kolom - Untuk mengganti prosedur yang disimpan
- Gunakan fungsi sebaris sebagai predikat filter untuk kebijakan keamanan
Integrasi .NET Framework CLR ke dalam SQL Server dibahas dalam artikel ini. Integrasi CLR tidak berlaku untuk Azure SQL Database.
Nota
Untuk Microsoft Fabric Data Warehouse atau Azure Synapse Analytics, lihat CREATE FUNCTION (Azure Synapse Analytics dan Microsoft Fabric).
Petunjuk / Saran
Anda dapat menentukan CREATE OR ALTER FUNCTION
untuk membuat fungsi baru jika tidak ada dengan nama tersebut, atau mengubah fungsi yang ada, dalam satu pernyataan.
Sintaksis
Sintaks untuk fungsi skalar Transact-SQL.
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type [ NULL ]
[ = default ] [ READONLY ] }
[ , ...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ , ...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
[ ; ]
Sintaks untuk fungsi bernilai tabel sebaris Transact-SQL.
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type [ NULL ]
[ = default ] [ READONLY ] }
[ , ...n ]
]
)
RETURNS TABLE
[ WITH <function_option> [ , ...n ] ]
[ AS ]
RETURN [ ( ] select_stmt [ ) ]
[ ; ]
Sintaks untuk Transact-SQL fungsi bernilai tabel multi-pernyataan.
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type [ NULL ]
[ = default ] [ READONLY ] }
[ , ...n ]
]
)
RETURNS @return_variable TABLE <table_type_definition>
[ WITH <function_option> [ , ...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
[ ; ]
Sintaks untuk klausa fungsi Transact-SQL.
<function_option> ::=
{
[ ENCRYPTION ]
| [ SCHEMABINDING ]
| [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
| [ EXECUTE_AS_Clause ]
| [ INLINE = { ON | OFF } ]
}
<table_type_definition> ::=
( { <column_definition> <column_constraint>
| <computed_column_definition> }
[ <table_constraint> ] [ , ...n ]
)
<column_definition> ::=
{
{ column_name data_type }
[ [ DEFAULT constant_expression ]
[ COLLATE collation_name ] | [ ROWGUIDCOL ]
]
| [ IDENTITY [ (seed , increment ) ] ]
[ <column_constraint> [ ...n ] ]
}
<column_constraint> ::=
{
[ NULL | NOT NULL ]
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor
| WITH ( <index_option> [ , ...n ] )
[ ON { filegroup | "default" } ] ]
| [ CHECK ( logical_expression ) ] [ , ...n ]
}
<computed_column_definition> ::=
column_name AS computed_column_expression
<table_constraint> ::=
{
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
( column_name [ ASC | DESC ] [ , ...n ]
[ WITH FILLFACTOR = fillfactor
| WITH ( <index_option> [ , ...n ] )
| [ CHECK ( logical_expression ) ] [ , ...n ]
}
<index_option> ::=
{
PAD_INDEX = { ON | OFF }
| FILLFACTOR = fillfactor
| IGNORE_DUP_KEY = { ON | OFF }
| STATISTICS_NORECOMPUTE = { ON | OFF }
| ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS = { ON | OFF }
}
Sintaks untuk fungsi skalar CLR.
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name
( { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type [ NULL ]
[ = default ] }
[ , ...n ]
)
RETURNS { return_data_type }
[ WITH <clr_function_option> [ , ...n ] ]
[ AS ] EXTERNAL NAME <method_specifier>
[ ; ]
Sintaks untuk fungsi bernilai tabel CLR.
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name
( { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type [ NULL ]
[ = default ] }
[ , ...n ]
)
RETURNS TABLE <clr_table_type_definition>
[ WITH <clr_function_option> [ , ...n ] ]
[ ORDER ( <order_clause> ) ]
[ AS ] EXTERNAL NAME <method_specifier>
[ ; ]
Sintaks untuk klausa fungsi CLR.
<order_clause> ::=
{
<column_name_in_clr_table_type_definition>
[ ASC | DESC ]
} [ , ...n ]
<method_specifier> ::=
assembly_name.class_name.method_name
<clr_function_option> ::=
{
[ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
| [ EXECUTE_AS_Clause ]
}
<clr_table_type_definition> ::=
( { column_name data_type } [ , ...n ] )
Sintaks OLTP dalam memori untuk fungsi yang ditentukan pengguna skalar yang dikompilasi secara asli.
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type
[ NULL | NOT NULL ] [ = default ] [ READONLY ] }
[ , ...n ]
]
)
RETURNS return_data_type
WITH <function_option> [ , ...n ]
[ AS ]
BEGIN ATOMIC WITH (set_option [ , ... n ] )
function_body
RETURN scalar_expression
END
<function_option> ::=
{
| NATIVE_COMPILATION
| SCHEMABINDING
| [ EXECUTE_AS_Clause ]
| [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
}
Argumen
ATAU UBAH
Berlaku untuk: SQL Server 2016 (13.x) SP 1 dan versi yang lebih baru, dan Azure SQL Database.
Secara kondisional mengubah fungsi hanya jika sudah ada.
Sintaks opsional OR ALTER
tersedia untuk CLR, dimulai dengan SQL Server 2016 (13.x) SP 1 CU 1.
schema_name
Nama skema tempat fungsi yang ditentukan pengguna berada.
function_name
Nama fungsi yang ditentukan pengguna. Nama fungsi harus mematuhi aturan untuk pengidentifikasi dan harus unik dalam database dan skemanya.
Tanda kurung diperlukan setelah nama fungsi, bahkan jika parameter tidak ditentukan.
@parameter_name
Parameter dalam fungsi yang ditentukan pengguna. Satu atau lebih parameter dapat dideklarasikan.
Sebuah fungsi dapat memiliki maksimum 2.100 parameter. Nilai setiap parameter yang dideklarasikan harus disediakan oleh pengguna saat fungsi dijalankan, kecuali default untuk parameter ditentukan.
Tentukan nama parameter dengan menggunakan tanda at (@) sebagai karakter pertama. Nama parameter harus mematuhi aturan untuk pengidentifikasi. Parameter bersifat lokal untuk fungsi; Nama parameter yang sama dapat digunakan dalam fungsi lain. Parameter hanya dapat menggantikan konstanta; Mereka tidak dapat digunakan sebagai pengganti nama tabel, nama kolom, atau nama objek database lainnya.
ANSI_WARNINGS
tidak dihormati saat Anda meneruskan parameter dalam prosedur tersimpan, fungsi yang ditentukan pengguna, atau saat Anda mendeklarasikan dan mengatur variabel dalam pernyataan batch. Misalnya, jika variabel didefinisikan sebagai char(3), lalu diatur ke nilai yang lebih besar dari tiga karakter, data dipotong sesuai ukuran yang ditentukan, dan pernyataan INSERT
atau UPDATE
berhasil dieksekusi.
[ type_schema_name . ] parameter_data_type
Jenis data parameter, dan secara opsional skema yang dimilikinya. Untuk fungsi Transact-SQL, semua jenis data, termasuk jenis CLR yang ditentukan pengguna dan jenis tabel yang ditentukan pengguna, diizinkan kecuali tipe data stempel waktu . Untuk fungsi CLR, semua jenis data, termasuk jenis CLR yang ditentukan pengguna, diizinkan kecuali teks, ntext, gambar, jenis tabel yang ditentukan pengguna, dan tipe data stempel waktu . Jenis nonskalar, kursor dan tabel, tidak dapat ditentukan sebagai tipe data parameter dalam fungsi Transact-SQL atau CLR.
Jika type_schema_name tidak ditentukan, Mesin Database mencari scalar_parameter_data_type
dalam urutan berikut:
- Skema yang berisi nama tipe data sistem SQL Server.
- Skema default pengguna saat ini dalam database saat ini.
- Skema
dbo
dalam database saat ini.
[ = default ]
Nilai default untuk parameter. Jika nilai default ditentukan, fungsi dapat dijalankan tanpa menentukan nilai untuk parameter tersebut.
Nilai parameter default dapat ditentukan untuk fungsi CLR, kecuali untuk tipe data varchar(max) dan varbinary(max).
Ketika parameter fungsi memiliki nilai default, kata kunci DEFAULT
harus ditentukan saat fungsi dipanggil untuk mengambil nilai default. Perilaku ini berbeda dengan menggunakan parameter dengan nilai default dalam prosedur tersimpan di mana menghilangkan parameter juga menyiratkan nilai default. Namun, DEFAULT
kata kunci tidak diperlukan saat memanggil fungsi skalar dengan menggunakan EXECUTE
pernyataan.
HANYA BACA
Menunjukkan bahwa parameter tidak dapat diperbarui atau dimodifikasi dalam definisi fungsi.
READONLY
diperlukan untuk parameter jenis tabel (TVP) yang ditentukan pengguna, dan tidak dapat digunakan untuk jenis parameter lainnya.
return_data_type
Nilai yang dikembalikan dari fungsi skalar yang ditentukan pengguna. Untuk fungsi Transact-SQL, semua tipe data, termasuk jenis CLR yang ditentukan pengguna, diizinkan kecuali tipe data stempel waktu . Untuk fungsi CLR, semua jenis data, termasuk jenis CLR yang ditentukan pengguna, diizinkan kecuali tipe data teks, ntext, gambar, dan stempel waktu . Jenis nonskalar, kursor dan tabel, tidak dapat ditentukan sebagai tipe data yang ditampilkan dalam fungsi Transact-SQL atau CLR.
function_body
Menentukan bahwa serangkaian pernyataan Transact-SQL, yang bersama-sama tidak menghasilkan efek samping seperti memodifikasi tabel, menentukan nilai fungsi. function_body hanya digunakan dalam fungsi skalar dan fungsi bernilai tabel multi-pernyataan (MSTVF).
Dalam fungsi skalar, function_body adalah serangkaian pernyataan Transact-SQL yang bersama-sama mengevaluasi nilai skalar.
Dalam MSTVF, function_body adalah serangkaian pernyataan Transact-SQL yang mengisi TABLE
variabel pengembalian.
scalar_expression
Menentukan nilai skalar yang dikembalikan fungsi skalar.
tabel
Menentukan bahwa nilai yang ditampilkan dari fungsi bernilai tabel (TVF) adalah tabel. Hanya konstanta dan @local_variables yang dapat diteruskan ke TVF.
Dalam TVF sebaris, TABLE
nilai pengembalian ditentukan melalui satu SELECT
pernyataan. Fungsi sebaris tidak memiliki variabel pengembalian terkait.
Dalam fungsi bernilai tabel multi-pernyataan (MSTVF), @return_variable adalah TABLE
variabel, digunakan untuk menyimpan dan mengakumulasi baris yang harus dikembalikan sebagai nilai fungsi.
@
return_variable hanya dapat ditentukan untuk fungsi Transact-SQL dan bukan untuk fungsi CLR.
select_stmt
Pernyataan tunggal SELECT
yang menentukan nilai pengembalian fungsi bernilai tabel sebaris (TVF).
PESANAN (<order_clause>)
Menentukan urutan di mana hasil dikembalikan dari fungsi bernilai tabel. Untuk informasi selengkapnya, lihat bagian, Menggunakan urutan pengurutan dalam fungsi bernilai tabel CLR nanti di artikel ini.
NAMA EKSTERNAL <method_specifier>assembly_name.class_name. method_name
Berlaku untuk: SQL Server 2008 (10.0.x) SP 1 dan versi yang lebih baru.
Menentukan rakitan dan metode yang akan dirujuk oleh nama fungsi yang dibuat.
assembly_name - harus cocok dengan nilai di
name
kolomSELECT * FROM sys.assemblies;
.Nama yang digunakan pada pernyataan tersebut
CREATE ASSEMBLY
.class_name - harus cocok dengan nilai di
assembly_name
kolomSELECT * FROM sys.assembly_modules;
.Seringkali nilai berisi titik atau titik yang disematkan. Dalam kasus seperti itu, sintaks Transact-SQL mengharuskan nilai dibatasi dengan sepasang tanda kurung siku (
[]
), atau dengan sepasang tanda kutip ganda (""
).method_name - harus cocok dengan nilai di
method_name
kolomSELECT * FROM sys.assembly_modules;
.Metodenya harus statis.
Dalam contoh umum untuk MyFood.dll
, di mana semua jenis berada di MyFood
namespace, nilainya EXTERNAL NAME
bisa berupa MyFood.[MyFood.MyClass].MyStaticMethod
.
Secara default, SQL Server tidak dapat mengeksekusi kode CLR. Anda dapat membuat, memodifikasi, dan menjatuhkan objek database yang mereferensikan modul runtime bahasa umum. Namun, Anda tidak dapat menjalankan referensi ini di SQL Server hingga Anda mengaktifkan opsi clr diaktifkan. Untuk mengaktifkan opsi ini, gunakan sp_configure. Opsi ini tidak tersedia dalam database mandiri.
<table_type_definition> ( { column_definition<>< column_constraint | <computed_column_definition> } [ <table_constraint> ] [ , ... n ] )
Menentukan jenis data tabel untuk fungsi Transact-SQL. Deklarasi tabel mencakup definisi kolom dan batasan kolom atau tabel. Tabel selalu dimasukkan ke dalam grup file utama.
<clr_table_type_definition> ( { column_namedata_type } [ , ... n ] )
Berlaku untuk: SQL Server 2008 (10.0.x) SP 1 dan versi yang lebih baru, dan Azure SQL Database (Pratinjau di beberapa wilayah).
Menentukan jenis data tabel untuk fungsi CLR. Deklarasi tabel hanya menyertakan nama kolom dan tipe data. Tabel selalu dimasukkan ke dalam grup file utama.
NULL | BUKAN NULL
Hanya didukung untuk fungsi yang dikompilasi secara asli, skalar yang ditentukan pengguna. Untuk informasi selengkapnya, lihat Fungsi User-Defined Skalar untuk In-Memory OLTP.
NATIVE_COMPILATION
Menunjukkan apakah fungsi yang ditentukan pengguna dikompilasi secara native. Argumen ini diperlukan untuk fungsi yang ditentukan pengguna skalar yang dikompilasi secara asli.
MULAI ATOM DENGAN
Diperlukan, dan hanya didukung, untuk fungsi skalar yang ditentukan pengguna yang dikompilasi secara asli. Untuk informasi selengkapnya, lihat Blok Atom dalam Prosedur Asli.
SCHEMABINDING
Argumen ini SCHEMABINDING
diperlukan untuk fungsi yang dikompilasi secara asli, skalar yang ditentukan pengguna.
JALANKAN SEBAGAI
EXECUTE AS
diperlukan untuk fungsi yang dikompilasi secara asli dan ditentukan pengguna skalar.
<function_option> ::= dan <clr_function_option> ::=
Menentukan bahwa fungsi memiliki satu atau beberapa opsi berikut.
ENKRIPSI
Berlaku untuk: SQL Server 2008 (10.0.x) SP 1 dan versi yang lebih baru.
Menunjukkan bahwa Mesin Database mengonversi teks CREATE FUNCTION
asli pernyataan ke format yang dikaburkan. Output pengaburan tidak terlihat langsung dalam tampilan katalog apa pun. Pengguna yang tidak memiliki akses ke tabel sistem atau file database tidak dapat mengambil teks yang dikaburkan. Namun, teks tersedia untuk pengguna istimewa yang dapat mengakses tabel sistem melalui koneksi Diagnostik untuk administrator database atau mengakses file database secara langsung. Selain itu, pengguna yang dapat melampirkan debugger ke proses server dapat mengambil prosedur asli dari memori saat runtime. Untuk informasi selengkapnya tentang mengakses metadata sistem, lihat Konfigurasi Visibilitas Metadata.
Menggunakan opsi ini mencegah fungsi diterbitkan sebagai bagian dari replikasi SQL Server. Opsi ini tidak dapat ditentukan untuk fungsi CLR.
SCHEMABINDING
Menentukan bahwa fungsi terikat ke objek database yang dirujuknya. Saat SCHEMABINDING
ditentukan, objek dasar tidak dapat dimodifikasi dengan cara yang akan memengaruhi definisi fungsi. Definisi fungsi itu sendiri harus terlebih dahulu dimodifikasi atau dihilangkan untuk menghapus dependensi pada objek yang akan dimodifikasi.
Pengikatan fungsi ke objek yang direferensikannya dihapus hanya ketika salah satu tindakan berikut terjadi:
- Fungsinya dijatuhkan.
- Fungsi dimodifikasi dengan menggunakan
ALTER
pernyataan denganSCHEMABINDING
opsi yang tidak ditentukan.
Fungsi dapat terikat skema hanya jika kondisi berikut benar:
- Fungsinya adalah fungsi Transact-SQL.
- Fungsi dan tampilan yang ditentukan pengguna yang direferensikan oleh fungsi juga terikat skema.
- Objek yang direferensikan oleh fungsi direferensikan menggunakan nama dua bagian.
- Fungsi dan objek yang direferensikannya termasuk dalam database yang sama.
- Pengguna yang menjalankan
CREATE FUNCTION
pernyataan memilikiREFERENCES
izin pada objek database yang direferensikan fungsi.
MENGEMBALIKAN NULL PADA INPUT NULL | DIPANGGIL PADA INPUT NULL
Menentukan OnNULLCall
atribut fungsi skalar. Jika tidak ditentukan, CALLED ON NULL INPUT
tersirat secara default. Dengan kata lain, isi fungsi mengeksekusi bahkan jika NULL
diteruskan sebagai argumen.
Jika RETURNS NULL ON NULL INPUT
ditentukan dalam fungsi CLR, ini menunjukkan bahwa SQL Server dapat mengembalikan NULL
ketika salah satu argumen yang diterimanya adalah NULL
, tanpa benar-benar memanggil isi fungsi. Jika metode fungsi CLR yang ditentukan dalam <method_specifier>
sudah memiliki atribut kustom yang menunjukkan RETURNS NULL ON NULL INPUT
, tetapi pernyataan menunjukkan CREATE FUNCTION
CALLED ON NULL INPUT
, CREATE FUNCTION
pernyataan tersebut diutamakan.
OnNULLCall
Atribut tidak dapat ditentukan untuk fungsi bernilai tabel CLR.
JALANKAN SEBAGAI
Menentukan konteks keamanan di mana fungsi yang ditentukan pengguna dijalankan. Oleh karena itu, Anda dapat mengontrol akun pengguna mana yang digunakan SQL Server untuk memvalidasi izin pada objek database apa pun yang direferensikan oleh fungsi.
EXECUTE AS
tidak dapat ditentukan untuk fungsi bernilai tabel sebaris.
Untuk informasi selengkapnya, lihat EXECUTE AS Clause (Transact-SQL).
SEBARIS = { AKTIF | MATI }
Berlaku untuk: SQL Server 2019 (15.x) dan versi yang lebih baru, dan Azure SQL Database.
Menentukan apakah UDF skalar ini harus sejajar atau tidak. Klausul ini hanya berlaku untuk fungsi skalar yang ditentukan pengguna. Klausul tersebut INLINE
tidak wajib. Jika INLINE
klausa tidak ditentukan, klausa tersebut secara otomatis diatur ke ON
atau OFF
berdasarkan apakah UDF dapat diinline. Jika INLINE = ON
ditentukan tetapi UDF ditemukan tidak dapat diinline, kesalahan akan dilemparkan. Untuk informasi selengkapnya, lihat Scalar UDF Inlining.
< > column_definition ::=
Menentukan tipe data tabel. Deklarasi tabel mencakup definisi dan batasan kolom. Untuk fungsi CLR, hanya column_name dan data_type yang dapat ditentukan.
column_name
Nama kolom dalam tabel. Nama kolom harus mematuhi aturan untuk pengidentifikasi dan harus unik dalam tabel. column_name dapat terdiri dari 1 hingga 128 karakter.
data_type
Menentukan jenis data kolom. Untuk fungsi Transact-SQL, semua jenis data, termasuk jenis yang ditentukan pengguna CLR, diizinkan kecuali stempel waktu. Untuk fungsi CLR, semua jenis data, termasuk jenis CLR yang ditentukan pengguna, diizinkan kecuali teks, ntext, gambar, char, varchar, varchar(max), dan stempel waktu. Kursor tipe nonskalar tidak dapat ditentukan sebagai tipe data kolom dalam fungsi Transact-SQL atau CLR.
constant_expression DEFAULT
Menentukan nilai yang disediakan untuk kolom saat nilai tidak disediakan secara eksplisit selama penyisipan.
constant_expression adalah konstanta, NULL
, atau nilai fungsi sistem.
DEFAULT
Definisi dapat diterapkan ke kolom apa pun kecuali yang memiliki IDENTITY
properti.
DEFAULT
tidak dapat ditentukan untuk fungsi bernilai tabel CLR.
MENYUSUN collation_name
Menentukan kolas untuk kolom. Jika tidak ditentukan, kolom ditetapkan kolase default database. Nama kolase dapat berupa nama kolase Windows atau nama kolase SQL. Untuk daftar dan informasi selengkapnya tentang kolasi, lihat Nama Kolase Windows (Transact-SQL) dan Nama Kolase SQL Server (Transact-SQL).
Klausa ini COLLATE
dapat digunakan untuk mengubah kolase hanya kolom dari jenis data char, varchar, nchar, dan nvarchar .
COLLATE
tidak dapat ditentukan untuk fungsi bernilai tabel CLR.
ROWGUIDCOL
Menunjukkan bahwa kolom baru adalah kolom pengidentifikasi unik global baris. Hanya satu kolom uniqueidentifier per tabel yang dapat ditetapkan sebagai ROWGUIDCOL
kolom. Properti hanya ROWGUIDCOL
dapat ditetapkan ke kolom uniqueidentifier .
Properti ROWGUIDCOL
tidak memberlakukan keunikan nilai yang disimpan dalam kolom. Itu juga tidak secara otomatis menghasilkan nilai untuk baris baru yang dimasukkan ke dalam tabel. Untuk menghasilkan nilai unik untuk setiap kolom, gunakan NEWID
fungsi pada INSERT
pernyataan. Nilai default dapat ditentukan; namun, NEWID
tidak dapat ditentukan sebagai default.
IDENTITAS
Menunjukkan bahwa kolom baru adalah kolom identitas. Saat baris baru ditambahkan ke tabel, SQL Server memberikan nilai inkremental yang unik untuk kolom. Kolom identitas biasanya digunakan bersama dengan PRIMARY KEY
batasan untuk berfungsi sebagai pengidentifikasi baris unik untuk tabel. Properti IDENTITY
dapat ditetapkan ke kolom tinyint, smallint, int, bigint, decimal(p,0), atau numeric(p,0). Hanya satu kolom identitas yang dapat dibuat per tabel. Default dan DEFAULT
batasan terikat tidak dapat digunakan dengan kolom identitas. Anda harus menentukan benih dan kenaikan atau tidak keduanya. Jika tidak ditentukan, defaultnya adalah (1,1).
IDENTITY
tidak dapat ditentukan untuk fungsi bernilai tabel CLR.
biji
Nilai bilangan bulat yang akan ditetapkan ke baris pertama dalam tabel.
Kenaikan
Nilai bilangan bulat yang akan ditambahkan ke nilai benih untuk baris berturut-turut dalam tabel.
<column_constraint> ::= dan <table_constraint> ::=
Menentukan batasan untuk kolom atau tabel tertentu. Untuk fungsi CLR, satu-satunya jenis batasan yang diizinkan adalah NULL
. Batasan bernama tidak diizinkan.
NULL | BUKAN NULL
Menentukan apakah nilai null diizinkan dalam kolom.
NULL
tidak sepenuhnya merupakan batasan tetapi dapat ditentukan seperti NOT NULL
.
NOT NULL
tidak dapat ditentukan untuk fungsi bernilai tabel CLR.
KUNCI PRIMER
Batasan yang memberlakukan integritas entitas untuk kolom tertentu melalui indeks unik. Dalam fungsi yang ditentukan pengguna bernilai tabel, PRIMARY KEY
batasan hanya dapat dibuat pada satu kolom per tabel.
PRIMARY KEY
tidak dapat ditentukan untuk fungsi bernilai tabel CLR.
UNIK
Batasan yang menyediakan integritas entitas untuk kolom atau kolom tertentu melalui indeks unik. Tabel dapat memiliki beberapa UNIQUE
batasan.
UNIQUE
tidak dapat ditentukan untuk fungsi bernilai tabel CLR.
BERKLUSTER | NONCLUSTERED
Menunjukkan bahwa indeks berkluster atau non-kluster dibuat untuk PRIMARY KEY
batasan atau UNIQUE
.
PRIMARY KEY
batasan penggunaan CLUSTERED
, dan UNIQUE
batasan penggunaan NONCLUSTERED
.
CLUSTERED
dapat ditentukan hanya untuk satu batasan. Jika CLUSTERED
ditentukan untuk batasan UNIQUE
dan PRIMARY KEY
batasan juga ditentukan, penggunaan PRIMARY KEY
NONCLUSTERED
.
CLUSTERED
dan NONCLUSTERED
tidak dapat ditentukan untuk fungsi bernilai tabel CLR.
CEK
Batasan yang memberlakukan integritas domain dengan membatasi kemungkinan nilai yang dapat dimasukkan ke dalam kolom atau kolom.
CHECK
batasan tidak dapat ditentukan untuk fungsi bernilai tabel CLR.
logical_expression
Ekspresi logis yang mengembalikan TRUE
atau FALSE
.
< > computed_column_definition ::=
Menentukan kolom yang dihitung. Untuk informasi selengkapnya tentang kolom yang dihitung, lihat BUAT TABEL (Transact-SQL).
column_name
Nama kolom yang dihitung.
computed_column_expression
Ekspresi yang menentukan nilai kolom komputasi.
< > index_option ::=
Menentukan opsi indeks untuk PRIMARY KEY
indeks atau UNIQUE
. Untuk informasi selengkapnya tentang opsi indeks, lihat BUAT INDEKS (Transact-SQL).
PAD_INDEX = { ON | NONAKTIF }
Menentukan padding indeks. Defaultnya adalah OFF
.
FILLFACTOR = fillfactor
Menentukan persentase yang menunjukkan seberapa penuh Mesin Database harus membuat tingkat daun setiap halaman indeks selama pembuatan atau perubahan indeks. fillfactor harus berupa nilai bilangan bulat dari 1 hingga 100. Defaultnya adalah 0.
IGNORE_DUP_KEY = { AKTIF | NONAKTIF }
Menentukan respons kesalahan saat operasi sisipkan mencoba menyisipkan nilai kunci duplikat ke dalam indeks unik. Opsi IGNORE_DUP_KEY
hanya berlaku untuk menyisipkan operasi setelah indeks dibuat atau dibangun kembali. Defaultnya adalah OFF
.
STATISTICS_NORECOMPUTE = { AKTIF | NONAKTIF }
Menentukan apakah statistik distribusi dihitung ulang. Defaultnya adalah OFF
.
ALLOW_ROW_LOCKS = { AKTIF | NONAKTIF }
Menentukan apakah kunci baris diizinkan. Defaultnya adalah ON
.
ALLOW_PAGE_LOCKS = { AKTIF | NONAKTIF }
Menentukan apakah kunci halaman diizinkan. Defaultnya adalah ON
.
Praktik terbaik
Jika fungsi yang ditentukan pengguna tidak dibuat dengan SCHEMABINDING
klausa, perubahan yang dibuat pada objek yang mendasarinya dapat memengaruhi definisi fungsi dan menghasilkan hasil yang tidak terduga saat dipanggil. Kami menyarankan agar Anda menerapkan salah satu metode berikut untuk memastikan bahwa fungsi tidak menjadi usang karena perubahan pada objek yang mendasarnya:
Tentukan
WITH SCHEMABINDING
klausa saat Anda membuat fungsi. Opsi ini memastikan bahwa objek yang direferensikan dalam definisi fungsi tidak dapat dimodifikasi, kecuali fungsi juga dimodifikasi.Jalankan prosedur sp_refreshsqlmodule tersimpan setelah memodifikasi objek apa pun yang ditentukan dalam definisi fungsi.
Untuk informasi selengkapnya dan pertimbangan performa tentang fungsi bernilai tabel sebaris (TVF sebaris) dan fungsi bernilai tabel multi-pernyataan (MSTVF), lihat Membuat fungsi yang ditentukan pengguna (Mesin Database).
Jenis data
Jika parameter ditentukan dalam fungsi CLR, parameter tersebut harus berupa jenis SQL Server seperti yang ditentukan sebelumnya untuk scalar_parameter_data_type. Untuk informasi selengkapnya membandingkan tipe data sistem SQL Server dengan tipe data integrasi CLR, atau tipe data runtime bahasa umum .NET Framework, lihat Memetakan Data Parameter CLR.
Agar SQL Server mereferensikan metode yang benar saat kelebihan beban dalam kelas, metode yang ditunjukkan dalam <method_specifier>
harus memiliki karakteristik berikut:
- Menerima jumlah parameter yang sama seperti yang ditentukan dalam
[ , ...n ]
. - Terima semua parameter berdasarkan nilai, bukan dengan referensi.
- Gunakan jenis parameter yang kompatibel dengan jenis yang ditentukan dalam fungsi SQL Server.
Jika tipe data yang ditampilkan dari fungsi CLR menentukan jenis tabel (RETURNS TABLE
), jenis data yang ditampilkan dari metode di <method_specifier>
harus dari jenis IEnumerator
atau IEnumerable
, dan mengasumsikan bahwa antarmuka diimplementasikan oleh pembuat fungsi. Tidak seperti fungsi Transact-SQL, fungsi CLR tidak dapat menyertakan PRIMARY KEY
, UNIQUE
, atau CHECK
batasan di <table_type_definition>
. Jenis data kolom yang ditentukan dalam <table_type_definition>
harus cocok dengan jenis kolom yang sesuai dari kumpulan hasil yang dikembalikan oleh metode pada <method_specifier>
waktu eksekusi. Pemeriksaan jenis ini tidak dilakukan pada saat fungsi dibuat.
Untuk informasi selengkapnya tentang cara memprogram fungsi CLR, lihat Fungsi User-Defined CLR.
Komentar
Fungsi skalar dapat dipanggil di mana ekspresi skalar digunakan, yang mencakup kolom komputasi dan CHECK
definisi batasan. Fungsi skalar juga dapat dijalankan dengan menggunakan pernyataan EXECUTE (Transact-SQL). Fungsi skalar harus dipanggil dengan menggunakan setidaknya nama dua bagian fungsi (<schema>.<function>
). Untuk informasi selengkapnya tentang nama multibagian, lihat Transact-SQL Konvensi Sintaks (Transact-SQL). Fungsi bernilai tabel dapat dipanggil di mana ekspresi tabel diizinkan dalam FROM
klausa SELECT
, INSERT
, UPDATE
, atau DELETE
pernyataan. Untuk informasi selengkapnya, lihat Menjalankan fungsi yang ditentukan pengguna.
Interoperabilitas
Pernyataan berikut valid dalam suatu fungsi:
- Pernyataan penugasan.
- Pernyataan Control-of-Flow kecuali
TRY...CATCH
pernyataan. -
DECLARE
yang mendefinisikan variabel data lokal dan kursor lokal. -
SELECT
pernyataan yang berisi daftar pilih dengan ekspresi yang menetapkan nilai ke variabel lokal. - Operasi kursor yang mereferensikan kursor lokal yang dideklarasikan, dibuka, ditutup, dan dibatalkan alokasi dalam fungsi. Hanya
FETCH
pernyataan yang menetapkan nilai ke variabel lokal menggunakan klausa yangINTO
diizinkan;FETCH
pernyataan yang mengembalikan data ke klien tidak diizinkan. -
INSERT
,UPDATE
, danDELETE
pernyataan yang memodifikasi variabel tabel lokal. -
EXECUTE
pernyataan yang memanggil prosedur tersimpan yang diperpanjang.
Untuk informasi selengkapnya, lihat Membuat fungsi yang ditentukan pengguna (Mesin Database).
Interoperabilitas kolom yang dikomputasi
Fungsi memiliki properti berikut. Nilai properti ini menentukan apakah fungsi dapat digunakan dalam kolom komputasi yang dapat dipertahankan atau diindeks.
Harta benda | Deskripsi | Catatan |
---|---|---|
IsDeterministic |
Fungsi bersifat deterministik atau nondeterministik. | Akses data lokal diizinkan dalam fungsi deterministik. Misalnya, fungsi yang selalu mengembalikan hasil yang sama setiap kali dipanggil menggunakan serangkaian nilai input tertentu, dan dengan status database yang sama akan diberi label deterministik. |
IsPrecise |
Fungsinya tepat atau tidak tepat. | Fungsi yang tidak tepat berisi operasi seperti operasi floating point. |
IsSystemVerified |
Properti presisi dan determinisme fungsi dapat diverifikasi oleh SQL Server. | |
SystemDataAccess |
Fungsi mengakses data sistem (katalog sistem atau tabel sistem virtual) di instans lokal SQL Server. | |
UserDataAccess |
Fungsi mengakses data pengguna di instans lokal SQL Server. | Termasuk tabel dan tabel sementara yang ditentukan pengguna, tetapi bukan variabel tabel. |
Properti presisi dan determinisme fungsi Transact-SQL ditentukan secara otomatis oleh SQL Server. Akses data dan sifat determinisme fungsi CLR dapat ditentukan oleh pengguna. Untuk informasi selengkapnya, lihat Integrasi CLR: atribut kustom untuk rutinitas CLR.
Untuk menampilkan nilai saat ini untuk properti ini, gunakan OBJECTPROPERTYEX (Transact-SQL).
Penting
Fungsi harus dibuat dengan SCHEMABINDING
menjadi deterministik.
Kolom komputasi yang memanggil fungsi yang ditentukan pengguna dapat digunakan dalam indeks ketika fungsi yang ditentukan pengguna memiliki nilai properti berikut:
-
IsDeterministic
adalahtrue
-
IsSystemVerified
istrue
(kecuali kolom yang dihitung dipertahankan) -
UserDataAccess
adalahfalse
-
SystemDataAccess
adalahfalse
Untuk informasi selengkapnya, lihat Indeks pada kolom terhitung.
Memanggil prosedur tersimpan yang diperluas dari fungsi
Prosedur tersimpan yang diperluas, saat memanggilnya dari dalam fungsi, tidak dapat mengembalikan kumpulan hasil ke klien. Setiap API ODS yang mengembalikan kumpulan hasil ke klien, mengembalikan FAIL
. Prosedur tersimpan yang diperluas dapat terhubung kembali ke instans SQL Server; namun, itu tidak boleh mencoba menggabungkan transaksi yang sama dengan fungsi yang memanggil prosedur tersimpan yang diperluas.
Mirip dengan pemanggilan dari batch atau prosedur tersimpan, prosedur tersimpan yang diperluas dijalankan dalam konteks akun keamanan Windows tempat SQL Server berjalan. Pemilik prosedur tersimpan harus mempertimbangkan skenario ini saat memberikan EXECUTE
izin kepada pengguna.
Keterbatasan
Fungsi yang ditentukan pengguna tidak dapat digunakan untuk melakukan tindakan yang mengubah status database.
Fungsi yang ditentukan pengguna tidak boleh berisi OUTPUT INTO
klausul yang memiliki tabel sebagai targetnya.
Pernyataan Service Broker berikut tidak dapat disertakan dalam definisi fungsi yang ditentukan pengguna Transact-SQL:
BEGIN DIALOG CONVERSATION
END CONVERSATION
GET CONVERSATION GROUP
MOVE CONVERSATION
RECEIVE
SEND
Fungsi yang ditentukan pengguna dapat ditumpuk; artinya, satu fungsi yang ditentukan pengguna dapat memanggil fungsi lain. Tingkat perapatan bertambah ketika fungsi yang dipanggil mulai eksekusi, dan berkurang ketika fungsi yang dipanggil selesai. Fungsi yang ditentukan pengguna dapat ditumpuk hingga 32 tingkat. Melebihi tingkatan maksimum bersarang menyebabkan seluruh rantai fungsi fungsional gagal. Referensi apa pun ke kode terkelola dari fungsi yang ditentukan pengguna Transact-SQL dihitung sebagai satu tingkat terhadap batas berlapis 32 tingkat. Metode yang dipanggil dari dalam kode terkelola tidak dihitung terhadap batas ini.
Menggunakan urutan pengurutan dalam fungsi bernilai tabel CLR
Saat menggunakan ORDER
klausa dalam fungsi bernilai tabel CLR, ikuti panduan berikut:
Anda harus memastikan bahwa hasil selalu diurutkan dalam urutan yang ditentukan. Jika hasilnya tidak dalam urutan yang ditentukan, SQL Server menghasilkan pesan kesalahan saat kueri dijalankan.
Jika klausa
ORDER
ditentukan, output fungsi bernilai tabel harus diurutkan sesuai dengan kolase kolom (eksplisit atau implisit). Misalnya, jika penyusunan kolom adalah bahasa Cina, hasil yang ditampilkan harus diurutkan sesuai dengan aturan pengurutan bahasa Cina. (Kolase ditentukan baik dalam DDL untuk fungsi bernilai tabel, atau diperoleh dari kolase database.)SQL Server selalu memverifikasi
ORDER
klausa jika ditentukan, sambil mengembalikan hasil, apakah prosesor kueri menggunakannya untuk melakukan pengoptimalan lebih lanjut atau tidak. GunakanORDER
klausa hanya jika Anda tahu bahwa klausa tersebut berguna untuk prosesor kueri.Prosesor kueri SQL Server memanfaatkan klausa secara
ORDER
otomatis dalam kasus berikut:- Sisipkan kueri di mana
ORDER
klausa kompatibel dengan indeks. -
ORDER BY
klausul yang kompatibel denganORDER
klausul. - Agregat, di mana
GROUP BY
kompatibel denganORDER
klausa. -
DISTINCT
agregat di mana kolom yang berbeda kompatibel denganORDER
klausa.
- Sisipkan kueri di mana
ORDER
Klausa tidak menjamin hasil yang diurutkan saat SELECT
kueri dijalankan, kecuali juga ORDER BY
ditentukan dalam kueri. Lihat sys.function_order_columns (Transact-SQL) untuk informasi tentang cara mengkueri kolom yang disertakan dalam urutan pengurutan untuk fungsi bernilai tabel.
Metainformasi
Tabel berikut mencantumkan tampilan katalog sistem yang dapat Anda gunakan untuk mengembalikan metadata tentang fungsi yang ditentukan pengguna.
Tampilan sistem | Deskripsi |
---|---|
sys.sql_modul | Lihat contoh E di bagian Contoh. |
sys.assembly_modules | Menampilkan informasi tentang fungsi CLR yang ditentukan pengguna. |
sys.parameter | Menampilkan informasi tentang parameter yang ditentukan dalam fungsi yang ditentukan pengguna. |
sys.sql_dependensi_ekspresi | Menampilkan objek dasar yang direferensikan oleh fungsi. |
Hak akses
CREATE FUNCTION
Memerlukan izin dalam database dan ALTER
izin pada skema tempat fungsi sedang dibuat. Jika fungsi menentukan jenis yang ditentukan pengguna, memerlukan EXECUTE
izin pada jenis tersebut.
Contoh
Untuk contoh selengkapnya dan pertimbangan performa tentang UDF, lihat Membuat fungsi yang ditentukan pengguna (Mesin Database).
Sebuah. Gunakan fungsi yang ditentukan pengguna bernilai skalar yang menghitung minggu ISO
Contoh berikut membuat fungsi ISOweek
yang ditentukan pengguna . Fungsi ini mengambil argumen tanggal dan menghitung nomor minggu ISO. Agar fungsi ini dapat dihitung dengan benar, SET DATEFIRST 1
harus dipanggil sebelum fungsi dipanggil.
Contoh ini juga menunjukkan penggunaan klausa EXECUTE AS (Transact-SQL) untuk menentukan konteks keamanan di mana prosedur tersimpan dapat dijalankan. Dalam contoh, opsi CALLER
menentukan bahwa prosedur dijalankan dalam konteks pengguna yang memanggilnya. Opsi lain yang dapat Anda tentukan adalah SELF
, OWNER
, dan user_name.
Berikut adalah panggilan fungsinya.
DATEFIRST
diatur ke 1
.
CREATE FUNCTION dbo.ISOweek (@DATE DATETIME)
RETURNS INT
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @ISOweek INT;
SET @ISOweek = DATEPART(wk, @DATE) + 1 -
DATEPART(wk, CAST(DATEPART(yy, @DATE) AS CHAR(4)) + '0104');
--Special cases: Jan 1-3 may belong to the previous year
IF (@ISOweek = 0)
SET @ISOweek = dbo.ISOweek(CAST(DATEPART(yy, @DATE) - 1 AS CHAR(4))
+ '12' + CAST(24 + DATEPART(DAY, @DATE) AS CHAR(2))) + 1;
--Special case: Dec 29-31 may belong to the next year
IF ((DATEPART(mm, @DATE) = 12)
AND ((DATEPART(dd, @DATE) - DATEPART(dw, @DATE)) >= 28))
SET @ISOweek = 1;
RETURN (@ISOweek);
END;
GO
SET DATEFIRST 1;
SELECT dbo.ISOweek(CONVERT(DATETIME, '12/26/2004', 101)) AS 'ISO Week';
Berikut kumpulan hasilnya.
ISO Week
----------------
52
B. Membuat fungsi bernilai tabel sebaris
Contoh berikut mengembalikan fungsi bernilai tabel sebaris dalam database AdventureWorks2022. Ini mengembalikan tiga kolom ProductID
, Name
, dan agregat total tahunan hingga saat ini berdasarkan toko untuk YTD Total
setiap produk yang dijual ke toko.
CREATE FUNCTION Sales.ufn_SalesByStore (@storeid INT)
RETURNS TABLE
AS
RETURN (
SELECT P.ProductID, P.Name, SUM(SD.LineTotal) AS 'Total'
FROM Production.Product AS P
INNER JOIN Sales.SalesOrderDetail AS SD ON SD.ProductID = P.ProductID
INNER JOIN Sales.SalesOrderHeader AS SH ON SH.SalesOrderID = SD.SalesOrderID
INNER JOIN Sales.Customer AS C ON SH.CustomerID = C.CustomerID
WHERE C.StoreID = @storeid
GROUP BY P.ProductID, P.Name
);
GO
Untuk memanggil fungsi, jalankan kueri ini.
SELECT * FROM Sales.ufn_SalesByStore (602);
C. Membuat fungsi bernilai tabel multi-pernyataan
Contoh berikut membuat fungsi fn_FindReports(InEmpID)
bernilai tabel dalam AdventureWorks2022
database. Ketika dilengkapi dengan ID karyawan yang valid, fungsi mengembalikan tabel yang sesuai dengan semua karyawan yang melapor kepada karyawan baik secara langsung maupun tidak langsung. Fungsi ini menggunakan ekspresi tabel umum (CTE) rekursif untuk menghasilkan daftar hierarkis karyawan. Untuk informasi selengkapnya tentang CTE rekursif, lihat WITH common_table_expression (Transact-SQL).
CREATE FUNCTION dbo.ufn_FindReports (@InEmpID INT)
RETURNS @retFindReports TABLE (
EmployeeID INT PRIMARY KEY NOT NULL,
FirstName NVARCHAR(255) NOT NULL,
LastName NVARCHAR(255) NOT NULL,
JobTitle NVARCHAR(50) NOT NULL,
RecursionLevel INT NOT NULL
)
--Returns a result set that lists all the employees who report to the
--specific employee directly or indirectly.
AS
BEGIN
WITH EMP_cte (
EmployeeID,
OrganizationNode,
FirstName,
LastName,
JobTitle,
RecursionLevel
) -- CTE name and columns
AS (
-- Get the initial list of Employees for Manager n
SELECT e.BusinessEntityID,
OrganizationNode = ISNULL(e.OrganizationNode, CAST('/' AS HIERARCHYID)),
p.FirstName,
p.LastName,
e.JobTitle,
0
FROM HumanResources.Employee e
INNER JOIN Person.Person p
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.BusinessEntityID = @InEmpID
UNION ALL
-- Join recursive member to anchor
SELECT e.BusinessEntityID,
e.OrganizationNode,
p.FirstName,
p.LastName,
e.JobTitle,
RecursionLevel + 1
FROM HumanResources.Employee e
INNER JOIN EMP_cte
ON e.OrganizationNode.GetAncestor(1) = EMP_cte.OrganizationNode
INNER JOIN Person.Person p
ON p.BusinessEntityID = e.BusinessEntityID
)
-- Copy the required columns to the result of the function
INSERT @retFindReports
SELECT EmployeeID,
FirstName,
LastName,
JobTitle,
RecursionLevel
FROM EMP_cte
RETURN
END;
GO
-- Example invocation
SELECT EmployeeID,
FirstName,
LastName,
JobTitle,
RecursionLevel
FROM dbo.ufn_FindReports(1);
GO
D. Membuat fungsi CLR
Contoh ini membuat fungsi len_s
CLR . Sebelum fungsi dibuat, rakitan SurrogateStringFunction.dll
didaftarkan dalam database lokal.
Berlaku untuk: SQL Server 2008 (10.0.x) SP 1 dan versi yang lebih baru.
DECLARE @SamplesPath NVARCHAR(1024);
-- You may have to modify the value of this variable if you have
-- installed the sample in a 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 [SurrogateStringFunction]
FROM @SamplesPath + 'StringManipulate\CS\StringManipulate\bin\debug\SurrogateStringFunction.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
GO
CREATE FUNCTION [dbo].[len_s] (@str NVARCHAR(4000))
RETURNS BIGINT
AS
EXTERNAL NAME [SurrogateStringFunction].[Microsoft.Samples.SqlServer.SurrogateStringFunction].[LenS];
GO
Untuk contoh cara membuat fungsi bernilai tabel CLR, lihat CLR Table-Valued Functions.
E. Menampilkan definisi fungsi yang ditentukan pengguna
SELECT DEFINITION,
type
FROM sys.sql_modules AS m
INNER JOIN sys.objects AS o
ON m.object_id = o.object_id
AND type IN ('FN', 'IF', 'TF');
GO
Definisi fungsi yang dibuat dengan menggunakan ENCRYPTION
opsi tidak dapat dilihat dengan menggunakan sys.sql_modules
; namun, informasi lain tentang fungsi terenkripsi ditampilkan.
Konten terkait
- Membuat fungsi yang ditentukan pengguna (Mesin Database)
- UBAH FUNGSI (Transact-SQL)
- FUNGSI DROP (Transact-SQL)
- OBJECTPROPERTYEX (Transact-SQL)
- sys.sql_modul (Transact-SQL)
- sys.assembly_modules (T-SQL)
- EKSEKUSI (Transact-SQL)
- Fungsi User-Defined CLR
- EVENTDATA (Transact-SQL)
- BUAT KEBIJAKAN KEAMANAN (Transact-SQL)