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

SQL सर्वर में निर्भरता खोजें:sql_expression_dependencies

SQL सर्वर में, आप sys.sql_expression_dependencies . का उपयोग कर सकते हैं सिस्टम कैटलॉग दृश्य वर्तमान डेटाबेस में उपयोगकर्ता द्वारा परिभाषित इकाई पर सभी निर्भरताओं को वापस करने के लिए। इसमें मूल रूप से संकलित, स्केलर उपयोगकर्ता-परिभाषित कार्यों और अन्य SQL सर्वर मॉड्यूल के बीच निर्भरता शामिल है।

आप इस दृश्य का उपयोग निम्न के लिए कर सकते हैं:

  • रिटर्न इकाइयाँ जो किसी दिए गए निकाय पर निर्भर करती हैं
  • रिटर्न इकाइयाँ जिस पर दी गई इकाई निर्भर करती है

तो उदाहरण के लिए, आप इसका उपयोग उन सभी वस्तुओं को वापस करने के लिए कर सकते हैं जो एक विशिष्ट तालिका का संदर्भ देते हैं। आप इसका उपयोग उन सभी वस्तुओं को वापस करने के लिए भी कर सकते हैं जिन्हें एक विशिष्ट संग्रहीत कार्यविधि इसके कोड के भीतर संदर्भित करती है।

विशेष रूप से, sys.sql_expression_dependencies निम्न संस्थाओं के लिए रिपोर्ट निर्भरता जानकारी देखें:

  • स्कीमा-बाध्य निकाय।
  • गैर-स्कीमा-बाध्य इकाइयां।
  • क्रॉस-डेटाबेस और क्रॉस-सर्वर निकाय। इकाई के नाम बताए गए हैं; हालांकि, इकाई आईडी का समाधान नहीं किया गया है।
  • स्कीमा-बाध्य निकायों पर कॉलम-स्तरीय निर्भरता। गैर-स्कीमा-बाउंड ऑब्जेक्ट्स के लिए कॉलम-स्तरीय निर्भरताएं sys.dm_sql_referenced_entities का उपयोग करके वापस की जा सकती हैं।
  • सर्वर-स्तरीय डीडीएल मास्टर डेटाबेस के संदर्भ में ट्रिगर होता है।

उदाहरण 1 - सभी कॉलम लौटाए गए हैं

यहां एक त्वरित उदाहरण दिया गया है जो sys.sql_expression_dependencies से सभी स्तंभों का चयन करता है . यह हमें दिखाता है कि वास्तव में दृश्य में कौन सा डेटा लौटाया गया है, और हम अपने प्रश्नों में इनमें से किसी भी कॉलम का उपयोग केवल उस डेटा को वापस करने के लिए कर सकते हैं जिसमें हम रुचि रखते हैं।

शीर्ष चुनें(1)* sys.sql_expression_dependencies से;

परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):

संदर्भ_आईडी | 114099447referencing_minor_id | 0रेफरेंसिंग_क्लास | 1referencing_class_desc | OBJECT_OR_COLUMNis_schema_bound_reference | 0referenced_class | 1referenced_class_desc | OBJECT_OR_COLUMNसंदर्भित_सर्वर_नाम | NULLreferenced_database_name | NULLreferenced_schema_name | dboreferenced_entity_name | Clientreferenced_id | 434100587referenced_minor_id | 0is_caller_निर्भर | 0is_अस्पष्ट | 0

यह उदाहरण लंबवत आउटपुट का उपयोग करता है ताकि क्षैतिज रूप से स्क्रॉल किए बिना कॉलम नामों को देखना आसान हो सके। इसलिए, स्तंभ नाम बाईं ओर सूचीबद्ध हैं और उनके संबंधित मान दाईं ओर हैं।

साथ ही, संक्षिप्तता के लिए मैंने TOP(1) . का उपयोग किया है परिणामों को केवल पहली पंक्ति तक सीमित करने के लिए।

उदाहरण 2 - एक इकाई पर निर्भर निकाय खोजें

किसी दिए गए निकाय पर निर्भर वस्तुओं को खोजने के लिए, उस इकाई के referencing_id . का उपयोग करें दृश्य से चयन करते समय।

उदाहरण:

संदर्भित_सर्वर_नाम एएस [संदर्भित सर्वर], संदर्भित_डेटाबेस_नाम एएस [संदर्भित डीबी], संदर्भित_स्कीमा_नाम एएस [संदर्भित स्कीमा], संदर्भित_entity_name एएस [संदर्भित इकाई], संदर्भित_वर्ग_डेस्क एएस [संदर्भित इकाई वर्ग] sys.sql_expression_dependenciesW से संदर्भित करें। );

परिणाम:

+---------------------+---------------------+---------- ---------------+---------------------+--------------- ---------------+| संदर्भित सर्वर | संदर्भित डीबी | संदर्भित स्कीमा | संदर्भित इकाई | संदर्भित इकाई वर्ग ||---------------------+---------------------+----- --------------------------------+--------------- ----------------|| नल | नल | डीबीओ | ग्राहक | OBJECT_OR_COLUMN || नल | नल | नल | क्लाइंट कोड | प्रकार | --------------+---------------------+--------------- --------------+

यहां मुझे uspGetClient . में संदर्भित सभी इकाइयां मिलती हैं संग्रहीत प्रक्रिया।

यहां uspGetClient की वास्तविक परिभाषा दी गई है :

CREATE PROCEDURE [dbo]।[uspGetClient] @ClientCode क्लाइंटकोड ASSELECT FirstName, LastNameFROM [dbo]। 

इसलिए हम देख सकते हैं कि यह Client . नामक तालिका से डेटा का चयन करता है , और यह @ClientCode . नामक तर्क को स्वीकार करता है एक (उपयोगकर्ता-परिभाषित उपनाम) डेटा प्रकार के clientcode . के साथ ।

उदाहरण 3 - ऐसी इकाइयां ढूंढें जिन पर एक इकाई निर्भर करती है

आप इसे इधर-उधर भी कर सकते हैं और उन वस्तुओं को प्राप्त कर सकते हैं जिन पर दी गई इकाई निर्भर करती है। ऐसा करने के लिए, referenced_id . का उपयोग करें (referencing_id के बजाय ) दृश्य से चयन करते समय।

उदाहरण:

चयन OBJECT_NAME(referenceing_id) AS [संदर्भित इकाई], OBJECT_NAME(referencing_minor_id) AS [संदर्भित लघु इकाई], Refering_class_desc AS [कक्षा], COL_NAME(referenced_id, Referenced_minor_id) sys। क्लाइंट');

परिणाम:

+--------------------------+-------------------------- -----+---------------------+---------------+| संदर्भ इकाई | माइनर एंटिटी का संदर्भ देना | कक्षा | कॉलम ||--------------------------+-------------------------- ----+---------------------+---------------|| uspGetClient | नल | OBJECT_OR_COLUMN | शून्य || uspGetOrdersByClient | नल | OBJECT_OR_COLUMN | शून्य || chkClientCode | नल | OBJECT_OR_COLUMN | क्लाइंट कोड |+--------------------------+-------------------------- ----+---------------------+---------------+

इस उदाहरण में मैं देखना चाहता था कि कौन सी संस्थाएं Client . पर निर्भर करती हैं तालिका (अर्थात कौन सी संस्थाएं उस तालिका को अपने SQL कोड में संदर्भित करती हैं)।

आप देखेंगे कि मैंने अलग-अलग कॉलम भी चुने हैं। ऐसा इसलिए है क्योंकि मैं संदर्भ . के बारे में जानकारी ढूंढ रहा हूं इकाई, न कि संदर्भित पिछले उदाहरण की तरह इकाई।

उदाहरण 4 - अधिक जानकारी प्राप्त करें

अधिक जानकारी वापस करने के लिए आप अन्य दृश्यों और/या तालिकाओं के साथ इस दृश्य में शामिल हो सकते हैं।

उदाहरण के लिए, आप इसमें sys.objects . के साथ जुड़ सकते हैं संदर्भित वस्तु का प्रकार प्राप्त करने के लिए:

चुनें OBJECT_NAME(referenceing_id) AS [संदर्भित इकाई], o.type_desc AS [प्रकार], COALESCE(COL_NAME(referencing_id, Referenceing_minor_id), '(n/a)') AS [कॉलम], रेफरेंस्ड_entity_name AS [संदर्भित एंटिटी] , COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS [कॉलम] से sys.sql_expression_dependencies AS sed INNER JOIN sys.objects AS o ON sed.referencing_id =o.object_id जहां संदर्भित_आईडी =ओ.ऑब्जेक्ट_आईडी क्लाइंट');

परिणाम:

+--------------------------+--------------------------+ ----------+---------------------+---------------+| संदर्भ इकाई | प्रकार | कॉलम | संदर्भित इकाई | कॉलम ||--------------------------+--------------------------+- -------------+---------------------+---------------|| uspGetClient | SQL_STORED_PROCEDURE | (एन/ए) | ग्राहक | (एन/ए) || uspGetOrdersByClient | SQL_STORED_PROCEDURE | (एन/ए) | ग्राहक | (एन/ए) || chkClientCode | CHECK_CONSTRAINT | (एन/ए) | ग्राहक | क्लाइंट कोड |+--------------------------+----------------------+- -------------+---------------------+---------------+

इस उदाहरण में मैंने COALESCE() . भी जोड़ा है (n/a) return वापस करने के लिए फ़ंक्शन जब भी referencing_minor_id है NULL . यह फ़ंक्शन SQL सर्वर में एक स्ट्रिंग के साथ NULL मान को बदलने के कई तरीकों में से एक है।

उदाहरण 5 - क्रॉस-डेटाबेस और क्रॉस-सर्वर निकाय

जैसा कि बताया गया है, sql_expression_dependencies क्रॉस-डेटाबेस और क्रॉस-सर्वर संस्थाओं पर भी काम करता है। हालांकि, इस मामले में, इकाई के नामों की सूचना दी जाती है लेकिन इकाई आईडी का समाधान नहीं किया जाता है।

यह उदाहरण ठीक उसी कोड का उपयोग करता है जैसा कि उदाहरण 2 में है, इस समय को छोड़कर यह किसी भिन्न निकाय के लिए है। इस बार, मैं उन संस्थाओं को खोजना चाहता हूं जो uspGetAlbumsByArtist . पर निर्भर हैं :

संदर्भित_सर्वर_नाम एएस [संदर्भित सर्वर], संदर्भित_डेटाबेस_नाम एएस [संदर्भित डीबी], संदर्भित_स्कीमा_नाम एएस [संदर्भित स्कीमा], संदर्भित_entity_name एएस [संदर्भित इकाई], संदर्भित_वर्ग_डेस्क एएस [संदर्भित इकाई वर्ग] sys. );

परिणाम:

+---------------------+---------------------+---------- ---------------+---------------------+--------------- ---------------+| संदर्भित सर्वर | संदर्भित डीबी | संदर्भित स्कीमा | संदर्भित इकाई | संदर्भित इकाई वर्ग ||---------------------+---------------------+----- --------------------------------+--------------- ----------------|| होमर | संगीत | डीबीओ | एल्बम | OBJECT_OR_COLUMN |+---------------------+---------------------+---------- --------------+---------------------+--------------- --------------+

इस उदाहरण में, संदर्भित सर्वर और संदर्भित डेटाबेस का एक मान है (पहले के उदाहरण की तरह NULL होने के बजाय)। ऐसा इसलिए है क्योंकि uspGetAlbumsByArtist संग्रहीत कार्यविधि एक लिंक किए गए सर्वर पर इकाई को संदर्भित करने के लिए चार-भाग के नाम का उपयोग करती है (पहले के उदाहरण से संग्रहीत प्रक्रिया में चार भाग नाम का उपयोग नहीं किया गया था, और इसने DB को निर्दिष्ट करने के लिए तीन-भाग के नाम का उपयोग नहीं किया था) .

इस उदाहरण में, Homer लिंक किए गए सर्वर का नाम है, और Music वह डेटाबेस है जो संग्रहीत कार्यविधि क्वेरी करता है।

हम इसे uspGetAlbumsByArtist . में देख सकते हैं की परिभाषा:

CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int ASSELECT AlbumNameFROM [होमर]। 

आधिकारिक दस्तावेज़ीकरण

अधिक विस्तृत जानकारी और उदाहरणों के लिए, देखें sys.sql_expression_dependencies माइक्रोसॉफ्ट वेबसाइट पर।

यहां एक और माइक्रोसॉफ्ट आलेख है जिसमें एसएसएमएस के माध्यम से निर्भरता प्राप्त करने के निर्देश शामिल हैं।


  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 सर्वर में जल्दी से 2 मिलियन पंक्तियाँ डालें

  2. ExecuteNonQuery:कनेक्शन गुण प्रारंभ नहीं किया गया है।

  3. डेटाबेस मेल ट्यूटोरियल

  4. यदि पैरामीटर शून्य है तो SQL सभी का चयन करें अन्यथा विशिष्ट आइटम लौटाएं

  5. शुरुआती के लिए SQL सर्वर में डायनामिक डेटा मास्किंग