2008-10-30 15 views
10

में दिखाई देने वाली टेक्स्ट स्ट्रिंग को दिए गए टेक्स्ट स्ट्रिंग को डीबी में सिबेज संग्रहीत प्रक्रिया पाएं I प्रोब में कहीं भी दिखाई देने वाली टेक्स्ट स्ट्रिंग के बाद सिबबेस डेटाबेस में संग्रहीत प्रक्रिया कैसे प्राप्त करें? मैं अगर DB में किसी अन्य proc एक मैं देख रहा हूँ के लिए इसी तरह तर्क है देखना चाहते हैं, और मुझे लगता है कि मैं एक बहुत अनोखी खोज स्ट्रिंग (शाब्दिक)प्रो

संपादित करें:

मैं उपयोग कर रहा हूँ Sybase संस्करण 11.2

उत्तर

7

एसक्यूएल में कहीं भी और Sybase बुद्धि:

select * from SYS.SYSPROCEDURE where proc_defn like '%whatever%' 

मुझे लगता है कि एएसई से परिचित नहीं हूँ, लेकिन डॉक्स (sybooks.sybase.com से उपलब्ध है) के अनुसार, यह कुछ ऐसा है:

ग्रीम के जवाब पर 0
select * from syscomments where texttype = 0 and text like '%whatever%' 
+0

शायद सही जवाब के निर्माता के लिए जाना है, लेकिन मेरी db नहीं है वह कॉलम मैं इस बॉक्स पर 11.2 चला रहा हूं (वास्तव में बहुत पुराना) जो कारण हो सकता है - कोई अन्य विचार? – Oskar

+0

ध्यान दें कि "Sybase" एक कंपनी का नाम है, न कि उत्पाद। आप Sybase अनुकूली सर्वर एंटरप्राइज़ (एएसई) 11.2 का उपयोग कर रहे हैं। –

15

दो बदलाव (तो यह भी 11.2 पर काम नहीं करेगा):

यह भी sproc के नाम सूचीबद्ध करता है, लेकिन कई बार पाठ प्रदर्शित होता है या प्रत्येक sproc के लिए कई पंक्तियां वापस आ जाएगी:

select object_name(id),* from syscomments 
    where texttype = 0 and text like '%whatever%' 

यह प्रत्येक sproc सिर्फ एक बार सूचीबद्ध करता है:

select distinct object_name(id) from syscomments 
    where texttype = 0 and text like '%whatever%' 
6
select * from sysobjects where 
    id in (select distinct (id) from syscomments where text like '%SearchTerm%') 
    and xtype = 'P' 
+0

xtype फ़िल्टर को छोड़ दें और आपके पास सभी डेटाबेस ऑब्जेक्ट्स को खोजने का एक आसान तरीका है, जिसमें यह टेक्स्ट उपयोगी है यदि आप किसी फ़ंक्शन या प्रक्रिया को छोड़ने पर विचार कर रहे हैं। –

3
select distinct object_name(syscomments.id) 'SearchText', syscomments.id from syscomments ,sysobjects 
    where texttype = 0 and text like '%SearchText%' and syscomments.id=sysobjects.id and sysobjects.type='P' 
+2

सुंदर कोड। यह क्या करता है? –

+0

@todofixthis - निष्पादित करें और जांचें – Nishad

5

कृपया याद रखें, syscomments में टेक्स्ट कॉलम वर्चर (255) है, इसलिए एक बड़ी प्रक्रिया में सिस्कोमेंट्स में कई पंक्तियां हो सकती हैं, इस प्रकार, उपर्युक्त चयन प्रक्रिया नाम नहीं पाएंगे यदि इसे 2 टेक्स्ट पंक्तियों में विभाजित किया गया है syscomments।

मैं चयन निम्नलिखित सुझाव है, जो उपरोक्त मामले को संभाल लेंगे:

declare @text varchar(100) 
select @text  = "%whatever%" 

select distinct o.name object 
from sysobjects o, 
    syscomments c 
where o.id=c.id 
and o.type='P' 
and (c.text like @text 
or exists(
    select 1 from syscomments c2 
     where c.id=c2.id 
     and c.colid+1=c2.colid 
     and right(c.text,100)+ substring(c2.text, 1, 100) like @text 
    ) 
) 
order by 1 

- इस के लिए प्रशंसा ASEisql

संबंधित मुद्दे