2010-03-16 16 views
17

मुझे एक बार संग्रहीत प्रक्रियाओं की लाइनों की आवश्यकता होती है ताकि यह पता लगा सके कि मेरे पास कुछ फ़ंक्शन, प्रक्रिया या तालिका का संदर्भ है, या कभी-कभी एसपी के कोड के अंदर कुछ खोजने का प्रयास करने के लिए।SQL सर्वर संग्रहीत प्रक्रिया कोड कहां संग्रहीत करता है?

SQL सर्वर प्रक्रिया कोड को संग्रहीत करता है?

उत्तर

28

sys.sql_modules का उपयोग करें क्योंकि definitionnvarchar(max) है क्योंकि यह लंबे कोड को छोटा नहीं करेगा।

INFORMATION_SCHEMA.ROUTINESROUTINE_DEFINITION कॉलम केवल nvarchar(4000) है इसलिए यदि आप लंबी प्रक्रिया के पाठ को देखने का प्रयास करते हैं और आप देखेंगे कि इसे छोटा कर दिया गया है।

उपयोग यह किसी भी प्रक्रिया, देखने के लिए, समारोह में पाठ के लिए खोज करने के लिए:

select * from sys.sql_modules where object_id=object_id('YourProcedure') 
+1

sys.sql_modules लगभग अज्ञात प्रतीत होता है। यह infoschema और syscomments – devio

+0

@devio के बजाय सही sql05 + समाधान है, यह बीओएल में है: http://msdn.microsoft.com/en-us/library/ms175081.aspx, इसलिए मुझे यकीन नहीं है कि क्यों कोई नहीं इसके बारे में जानता है। यदि आप पूर्ण परिभाषा चाहते हैं, तो यह 'समाधान' है। –

+0

आपने DISTINCT क्लॉज का उपयोग क्यों किया, क्या किसी ऑब्जेक्ट के लिए कई पंक्तियां हो सकती हैं? – Zia

0

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

+0

हालांकि सामग्री को खोजने का कोई आसान तरीका नहीं है। INFORMATION_SCHEMA.ROUTINES ROUTINE_DEFINITION में –

1

यदि आप SQL सर्वर प्रबंधन अध्ययन का उपयोग करते हैं, तो आप अपने इच्छित डेटाबेस पर राइट क्लिक कर सकते हैं, फिर "कार्य -> ​​स्क्रिप्ट जेनरेट करें" पर क्लिक करें।

वहां आप सभी एसपी के साथ एक ही फाइल, अलग फाइलों, या सीधे एक क्वेरी विंडो में एक स्क्रिप्ट उत्पन्न कर सकते हैं, और जो भी आप चाहते हैं उसे खोजें/बदलें।

उम्मीद है कि इससे मदद मिलती है।

(इस एसक्यूएल सर्वर 2008 के लिए है, लेकिन 2005 इस कार्यक्षमता भी है लगता है)

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

तुम भी एक ही सपा कोड देख सकते हैं, इस पथ "YourDB का पालन करके -> Programmability - > संग्रहीत प्रक्रियाएं ", फिर उस एसपी पर राइट क्लिक करें जिसे आप देखना चाहते हैं, और" संशोधित करें "पर क्लिक करें, और कोड के साथ एक क्वेरी विंडो खोला गया है।

4

यह प्रणाली स्कीमा तालिकाओं के अंदर इसे संग्रहीत: INFORMATION_SCHEMA.ROUTINES दृश्य के बारे में

SELECT * FROM INFORMATION_SCHEMA.ROUTINES 

MSDN देखें:

:

ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/c75561b2-c9a1-48a1-9afa-a5896b6454cf.htm 

इस पर एक सामग्री खोज के लिए, तो निम्न कर सकते हैं

SELECT * FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%search_string%' 
+2

केवल nvarchar (4000) है इसलिए लंबी प्रक्रिया के पाठ को देखने का प्रयास करें और आप देखेंगे कि इसे छोटा कर दिया गया है। लंबी प्रक्रियाओं का पूरा कोड कैसे प्राप्त करें, इसके लिए मेरा उत्तर देखें। –

1

यदि आप अन्य वस्तुओं के संदर्भों की खोज करने की कोशिश कर रहे हैं, तो आप एक quer चला सकते हैं इस तरह y:

चुनें * syscomments जिनमें टेक्स्ट की तरह '% searchstring%'

इस डेटाबेस खोज स्ट्रिंग का संदर्भ में किसी भी वस्तुओं वापस आ जाएगी से। फिर आप इन वस्तुओं को देख सकते हैं कि संग्रहीत प्रक्रियाओं (और विचार और कार्य) क्या कर रहे हैं।

+2

syscomments.text nvarchar (4000) है और नतीजतन यह कुछ भी लंबे समय तक छोटा कर देगा। एक सिस्टम व्यू के लिए मेरा उत्तर देखें जो nvarchar (max) कॉलम का उपयोग करता है और नतीजतन, –

+0

को छोटा नहीं करता है, यह वास्तव में छोटा नहीं होता है, यह किसी भी प्रक्रिया के लिए बहुत अधिक पंक्तियां बनाता है जो बहुत लंबा होता है। यदि आप लंबे समय तक प्रक्रियाओं को संग्रहित करते हैं, और आपके द्वारा संदर्भित दृश्य निश्चित रूप से एक बेहतर समाधान है, तो यह निश्चित रूप से उपयोग करना कठिन होता है। बेशक, यदि आप अलग-अलग प्रक्रियाएं बना रहे हैं जो 4000+ वर्ण लंबे हैं, तो शायद आप उन चीजों को करने के लिए मजबूर होने के लायक हैं जो अधिक कठिन हैं :) –

1

निर्भरता देखें

एसक्यूएल सर्वर प्रबंधन स्टूडियो में, एक मेज पर राइट क्लिक करें, और "देखें निर्भरता" चुनें। आप हर वस्तु तालिका

INFORMATION_SCHEMA

एक संग्रहीत proc, देखने के लिए, बाधा के लिए वास्तविक कोड, आदि SysComments में संग्रहीत किया जाता का संदर्भ देता है देखेंगे। आपको स्कीमा Information_Schema में दिए गए विचारों का उपयोग करके यह पूछना चाहिए। Information_Schema के सभी घटक यहां दिए गए हैं।

3

आप उपयोग कर सकते हैं:

SELECT DISTINCT 
    o.name AS Object_Name,o.type_desc 
    FROM sys.sql_modules  m 
     INNER JOIN sys.objects o ON m.object_id=o.object_id 
    WHERE m.definition Like '%'[email protected]+'%' 
    ORDER BY 2,1 

उपयोग इस एक दिया प्रक्रिया, देखने के लिए, समारोह के पाठ को देखने के

select object_definition(object_id(routine_name)) from information_schema.routines 

या

select object_definition(object_id) from sys.objects where name = 'foo' 

या यहाँ तक कि

select object_definition(object_id('foo')); -- 'foo' is the table name 

इन संस्करणों कभी नहीं छोटा कर दिया जाता है।

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