Skema yang mengikat objek seperti fungsi yang ditentukan pengguna (UDF) dianggap sebagai praktik yang baik, karena mencegah perubahan dilakukan pada objek apa pun yang dirujuknya yang dapat merusak fungsi secara tidak sengaja.
Anda dapat mengikat skema fungsi yang ditentukan pengguna pada saat Anda membuatnya, atau Anda dapat mengubahnya nanti.
Biasanya, Anda dapat memeriksa apakah UDF terikat skema di SQL Server dengan melihat definisinya. Anda biasanya dapat melakukan ini melalui GUI dengan memilih "Script as Create" atau serupa.
Anda juga dapat melakukannya menggunakan T-SQL dengan memilih definition kolom sys.sql_modules tampilan katalog sistem.
Tetapi ini hanya akan berfungsi jika UDF tidak dienkripsi.
Namun, ada kolom lain di sys.sql_modules tampilan yang sesuai dengan tujuan kami apakah UDF dienkripsi atau tidak:is_schema_bound
Contoh 1 – UDF Terenkripsi
Berikut adalah contoh untuk mengetahui apakah fungsi yang ditentukan pengguna terenkripsi yang disebut udf_CatsByName_ITVF terikat skema atau tidak.
SELECT
definition,
is_schema_bound
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('udf_CatsByName_ITVF');
Hasil:
+--------------+-------------------+ | definition | is_schema_bound | |--------------+-------------------| | NULL | 1 | +--------------+-------------------+
Dalam hal ini, UDF terikat skema.
Perhatikan juga bahwa definition kolom mengembalikan NULL karena fungsi telah menerapkan enkripsi.
Contoh 2 – UDF Tanpa Enkripsi
Jika enkripsi tidak diterapkan, kita bisa melihat definisi lengkap di kolom itu, dan kita akan melihat argumen WITH SCHEMABINDING dalam definisi.
Inilah kuerinya lagi ketika fungsinya tidak dienkripsi.
SELECT
definition
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('udf_CatsByName_ITVF');
Hasil:
+--------------+
| definition |
|--------------|
|
CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) )
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN (
SELECT
CatId,
CatName,
Phone
FROM dbo.Cats
WHERE CatName = @CatName
);
|
+--------------+
Saya telah menghapus is_schema_bound kolom dari kueri agar lebih mudah dibaca.
Apa pun itu, is_schema_bound kolom dapat digunakan apakah UDF dienkripsi atau tidak.