मैं कैसे जान सकता हूं कि SQL Server 2008 R2 पर कौन सी संग्रहीत कार्यविधि या ट्रिगर तालिका का उपयोग कर रहा है?


9

यह मामला है कि DB में मैं जाँच कर रहा हूँ, एक संग्रह तालिका है जो उपयोगकर्ता के इतिहास को बनाए रखती है, और एक ट्रिगर या स्टोर प्रक्रिया है कि कुछ समय के बाद इस तालिका से पंक्तियों को हटा दें, ताकि ओवरसाइज़ से बचा जा सके वही, मैंने डीबी को डिज़ाइन नहीं किया है, मैं सिर्फ इस डीबी का उपयोग करने वाले एप्लिकेशन का रखरखाव कर रहा हूं, इसलिए मुझे इन संग्रहीत प्रक्रियाओं या ट्रिगर्स का नाम नहीं पता है, जो मैं करना चाहता हूं वह इस संग्रहीत प्रक्रिया का पता लगाता है। या ट्रिगर, कोड की जाँच करें और इस "उपयोगकर्ता इतिहास" को मेज पर लंबे समय तक छोड़ने के लिए इसे संशोधित करें।

किसी ने मुझे "sysobjects" तालिका की जांच करने के लिए कहा, जहां मैं वास्तव में तालिका के समान नाम के साथ कुछ देख सकता हूं, लेकिन यह एकमात्र जानकारी है जिसे मैं पुनः प्राप्त करने में सक्षम हूं, कोई सलाह?

धन्यवाद।

जवाबों:


6

Sys.sql_modules का उपयोग करके सभी कोड खोजें

SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules sm
WHERE definition LIKE '%Mytable%'

या रेड गेट एसक्यूएल सर्च का उपयोग करें जो पूरी तरह से मुफ्त है

Syscomments या INFORMATION_SCHEMA.RUBBISH का उपयोग करें


क्या साथी भी लक्ष्य तालिका पर राइट-क्लिक नहीं कर सकते हैं और "शो डिपेंडेंसीज़" (या उस प्रभाव के कुछ पाठ) को हिट कर सकते हैं?
निक चम्मास

@ निक चम्मास: नहींं, यह अच्छी तरह से अविश्वसनीय होने के रूप में जाना जाता है
gbn

@ लेकिन, मैं समझता हूँ कि syscomments पश्चगामी संगतता के लिए है और इसे भविष्य में रिलीज़ से हटाया जा सकता है, लेकिन क्या आप इस बात की विस्तृत जानकारी दे सकते हैं कि INFORMATION_SCHEMA का उपयोग क्यों नहीं किया गया? thx
डेटागोड

@ दत्तागोड: वही क्यों हमेशा खराब विकल्प के रूप में syscomments: परिभाषा स्तंभ nvarchar (4000) है। इसका मतलब है कि अगर आप स्ट्रिंग पोजीशन में 4000 / या नावरचर (4000) पंक्तियों के बीच की सीमा को छोड़ते हैं तो एक टेबल रेफरेंस याद कर सकते हैं (यह निर्भर करता है कि आप इसे कैसे हैंडल करते हैं, क्या मैं मान सकता हूं कि अगर आप वास्तव में चाहते थे ...
Gbn

@ जीबी वास्तव syscommentsमें एक वस्तु के लिए कई पंक्तियाँ हैं जो 4000 वर्ण की सीमा से अधिक हो जाती हैं, जिससे प्रश्नों का उपयोग कर के रूप में मान्य है sys.sql_modules। मैं अभी भी सलाह देते हैं sys.sql_modulesक्योंकि syscommentsमूल्यह्रास किया जाता है।
केनेथ फिशर

4

ApexSQL खोज का प्रयास करें

ApexSQL Search एक निशुल्क SQL सर्वर प्रबंधन स्टूडियो और विज़ुअल स्टूडियो ऐड-इन है, जिसमें अन्य विशेषताओं के साथ, दृश्य निर्भरता सुविधा है। दृश्य निर्भरता सुविधा में सभी SQL डेटाबेस ऑब्जेक्ट्स के रिश्तों की कल्पना करने की क्षमता होती है, जिनमें एन्क्रिप्टेड और सिस्टम ऑब्जेक्ट्स, SQL सर्वर 2012 विशिष्ट ऑब्जेक्ट्स और डेटाबेस में संग्रहीत ऑब्जेक्ट्स ट्रांसपेरेंट डेटा एन्क्रिप्शन (TDE) के साथ एन्क्रिप्ट किए गए हैं

दृश्य निर्भरता सुविधा आपको दृश्य निर्भरता आरेख लेआउट को सेट और अनुकूलित करने की अनुमति देती है, जिसमें प्रस्तुत किए जाने वाले रिश्तों सहित, उत्पन्न आरेख का लेआउट और आकार, और निर्भरता की ड्रिल-डाउन गहराई शामिल है।

अस्वीकरण: मैं एक सहायक अभियंता के रूप में एपेक्सक्यूएल के लिए काम करता हूं


2

2008 के भविष्य के संदर्भ के लिए एक DMV भी है जिसका उपयोग किया जा सकता है। sys.dm_sql_referencing_entities। मैं आमतौर पर इसे SQL_Modules का उपयोग करना पसंद करता हूं क्योंकि यह अन्य चीजों के बीच झूठी सकारात्मकता से बचता है। मैंने यहाँ इसकी चर्चा की लेकिन मूल रूप से यदि आपके पास इस तरह का एक कोड है:

SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id) 
FROM sys.sql_modules WHERE [definition] LIKE '%ABC%'

आप तालिका एबीसी के लिए परिणामों के साथ समाप्त हो जाएंगे, तालिका ABCL को देखें vw_ABC, संग्रहीत कार्यविधि sp_Update_ABC आदि। मेरी जानकारी के सर्वश्रेष्ठ के लिए DMV एन्क्रिप्टेड SPs और साथ ही साथ एन्क्रिप्टेड SPL को हैंडल करेगा जबकि sql_modules विधि केवल अनएन्क्रिप्टेड SPs के साथ काम करती है। ।

उसी क्वेरी का DMV संस्करण यह है:

SELECT * FROM sys.dm_sql_referencing_entities('dbo.ABC', 'OBJECT')

1

इसके अलावा आप sys.sql_expression_dependencies कैटलॉग दृश्य का उपयोग कर सकते हैं । इस क्वेरी का उपयोग करें:

SELECT 
referencing_object_name = obj.name, 
referencing_object_type_desc = obj.type_desc, 
referenced_object_name = referenced_entity_name
FROM sys.sql_expression_dependencies sd 
INNER JOIN sys.objects obj 
ON sd.referencing_id = obj.[object_id] 
WHERE referenced_entity_name = 'MyTable'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.