उपयोगकर्ता-परिभाषित फ़ंक्शन (यूडीएफ) जैसे ऑब्जेक्ट को बाध्य करने वाली स्कीमा को अच्छा अभ्यास माना जाता है, क्योंकि यह किसी भी ऑब्जेक्ट में किए जाने वाले परिवर्तनों को रोकता है जो कि अनजाने में फ़ंक्शन को तोड़ सकता है।
आप किसी उपयोगकर्ता-परिभाषित फ़ंक्शन को बनाते समय उसे स्कीमा बाइंड कर सकते हैं, या आप बाद में बदल सकते हैं।
आम तौर पर, आप इसकी परिभाषा को देखकर जांच सकते हैं कि SQL सर्वर में एक यूडीएफ स्कीमा बाध्य है या नहीं। आप आमतौर पर "स्क्रिप्ट के रूप में बनाएँ" या इसी तरह का चयन करके GUI के माध्यम से ऐसा कर सकते हैं।
आप इसे definition
. का चयन करके T-SQL का उपयोग करके भी कर सकते हैं sys.sql_modules
. का कॉलम सिस्टम कैटलॉग व्यू।
लेकिन यह तभी काम करेगा जब UDF एन्क्रिप्टेड न हो।
हालांकि, sys.sql_modules
. में एक और कॉलम है देखें जो हमारे उद्देश्य को पूरा करता है चाहे यूडीएफ एन्क्रिप्ट किया गया हो या नहीं:is_schema_bound
उदाहरण 1 - एन्क्रिप्टेड UDF
यहां यह पता लगाने का एक उदाहरण दिया गया है कि udf_CatsByName_ITVF
नामक एन्क्रिप्टेड उपयोगकर्ता-परिभाषित फ़ंक्शन है या नहीं स्कीमा बाध्य है या नहीं।
SELECT definition, is_schema_bound FROM sys.sql_modules WHERE object_id = OBJECT_ID('udf_CatsByName_ITVF');
परिणाम:
+--------------+-------------------+ | definition | is_schema_bound | |--------------+-------------------| | NULL | 1 | +--------------+-------------------+
इस मामले में, यूडीएफ स्कीमा बाध्य है।
यह भी ध्यान दें कि definition
कॉलम NULL देता है क्योंकि फ़ंक्शन में एन्क्रिप्शन लागू होता है।
उदाहरण 2 - एन्क्रिप्शन के बिना UDF
यदि एन्क्रिप्शन लागू नहीं किया गया होता, तो हम उस कॉलम में पूरी परिभाषा देख सकते थे, और हमने WITH SCHEMABINDING
तर्क देखा होगा परिभाषा में।
जब फ़ंक्शन एन्क्रिप्ट नहीं किया जाता है तो यहां फिर से क्वेरी होती है।
SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('udf_CatsByName_ITVF');
परिणाम:
+--------------+ | 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 ); | +--------------+
मैंने is_schema_bound
हटा दिया है पढ़ने में आसान बनाने के लिए क्वेरी से कॉलम।
किसी भी तरह से, is_schema_bound
कॉलम का उपयोग किया जा सकता है चाहे यूडीएफ एन्क्रिप्ट किया गया हो या नहीं।