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

मैं संग्रहीत प्रक्रिया में तालिकाओं की सूची कैसे प्राप्त कर सकता हूं?

दो उच्चतम मत वाले उत्तरों में बहुत से पदावनत तालिकाओं का उपयोग किया जाता है जिनसे बचा जाना चाहिए।
इसे करने का एक अधिक साफ तरीका यहां दिया गया है।

उन सभी तालिकाओं को प्राप्त करें जिन पर संग्रहीत कार्यविधि निर्भर करती है:

SELECT DISTINCT p.name AS proc_name, t.name AS table_name
FROM sys.sql_dependencies d 
INNER JOIN sys.procedures p ON p.object_id = d.object_id
INNER JOIN sys.tables     t ON t.object_id = d.referenced_major_id
ORDER BY proc_name, table_name

एमएस एसक्यूएल सर्वर 2005+ के साथ काम करता है

परिवर्तनों की सूची:

  • sysdepends sys.sql_dependencies . से बदला जाना चाहिए
    • नई तालिका object_id uses का उपयोग करती है id . के बजाय
    • नई तालिका referenced_major_id . का उपयोग करती है depid . के बजाय
  • sysobjects का उपयोग करना अधिक केंद्रित सिस्टम कैटलॉग दृश्यों के साथ प्रतिस्थापित किया जाना चाहिए
    • जैसा कि marc_s ने बताया, इसके बजाय sys.tables . का उपयोग करें और sys.procedures
    • नोट :यह जांचने से रोकता है कि o.xtype = 'p' . कहां है (आदि)
  • साथ ही, ऐसे सीटीई की वास्तव में कोई आवश्यकता नहीं है जो ROW_NUMBER() . का उपयोग करता हो बस यह सुनिश्चित करने के लिए कि हमारे पास लौटाए गए प्रत्येक रिकॉर्ड सेट में से केवल एक ही है। यही है DISTINCT के लिए है!

    • वास्तव में, SQL पर्दे के पीछे DISTINCT का उपयोग करने के लिए पर्याप्त स्मार्ट है।
    • मैं साक्ष्य के रूप में प्रस्तुत करता हूं:एक्ज़िबिट ए . निम्नलिखित प्रश्नों में समान निष्पादन योजना है!

      -- Complex
      WITH MyPeople AS (
        SELECT id, name,
        ROW_NUMBER() OVER(PARTITION BY id, name ORDER BY id, name) AS row
        FROM People)
      SELECT id, name
      FROM MyPeople
      WHERE row = 1
      
      -- Better
      SELECT DISTINCT id, name
      FROM People
      


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वेब ऐप से क्वेरी टाइम आउट लेकिन प्रबंधन स्टूडियो से ठीक चलता है

  2. मैं जावा/जेएसपी में एक एमएस एसक्यूएल सर्वर संग्रहीत प्रक्रिया को कैसे निष्पादित करूं, तालिका डेटा लौटा रहा हूं?

  3. SQL सर्वर (T-SQL उदाहरण) में 'datetime2' को 'datetime' में बदलें

  4. SQL सर्वर (T-SQL) में वर्तमान लॉगिन आईडी प्राप्त करें

  5. SQL सर्वर डेटाबेस को एक सर्वर से दूसरे सर्वर पर ले जाने के लिए युक्तियाँ - राजन सिंह द्वारा SQL ट्यूटोरियल