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.