Database
 sql >> डेटाबेस >  >> RDS >> Database

कैसे जांचें कि कोई टी-एसक्यूएल यूडीएफ स्कीमा बाध्य है (यहां तक ​​​​कि जब यह एन्क्रिप्ट किया गया हो)

उपयोगकर्ता-परिभाषित फ़ंक्शन (यूडीएफ) जैसे ऑब्जेक्ट को बाध्य करने वाली स्कीमा को अच्छा अभ्यास माना जाता है, क्योंकि यह किसी भी ऑब्जेक्ट में किए जाने वाले परिवर्तनों को रोकता है जो कि अनजाने में फ़ंक्शन को तोड़ सकता है।

आप किसी उपयोगकर्ता-परिभाषित फ़ंक्शन को बनाते समय उसे स्कीमा बाइंड कर सकते हैं, या आप बाद में बदल सकते हैं।

आम तौर पर, आप इसकी परिभाषा को देखकर जांच सकते हैं कि 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 कॉलम का उपयोग किया जा सकता है चाहे यूडीएफ एन्क्रिप्ट किया गया हो या नहीं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL जॉइन के लिए आपका अंतिम गाइड:INNER JOIN - भाग 1

  2. HA/DR सॉल्यूशन से बचें

  3. 12 आमतौर पर इस्तेमाल होने वाले SQL ऑपरेटर्स

  4. SQL चौराहा स्लाइड और नमूने

  5. सूचकांक विखंडन को कम करना