2012-09-27 20 views
9

के साथ सभी संग्रहीत प्रक्रियाओं को सूचीबद्ध करें क्या कोई भी डेटाबेस में अपने स्कीमा नामों के साथ सभी संग्रहीत प्रक्रियाओं को सूचीबद्ध करने के तरीके पर सलाह दे सकता है? धन्यवाद!स्कीमा नाम

+1

कोशिश 'DatabaseName.information_schema.routines जहां routine_type = 'PROCEDURE'' – aserwin

+0

धन्यवाद, aserwin और marc_s से * चुनें। मुझे कैसे पता चलेगा कि यह इस डेटाबेस के लिए सभी संग्रहीत प्रक्रियाओं को सूचीबद्ध करेगा b/c मैंने इसे चलाया और 1,510 रिकॉर्ड की तुलना में 164 पंक्तियां प्राप्त कीं, जब मैंने एक और क्वेरी चलाई, जिसे मैंने सहेजा नहीं था, इसलिए मुझे यकीन नहीं है कि यह क्या था :-( – daniness

उत्तर

8

इस प्रयास करें:

SELECT 
    SchemaName = s.name, 
    ProcedureName = pr.name 
FROM 
    sys.procedures pr 
INNER JOIN 
    sys.schemas s ON pr.schema_id = s.schema_id 

यह सभी संग्रहित प्रक्रियाओं और एक परिणाम के सेट के रूप में अपने स्कीमा नाम सूचीबद्ध करना चाहिए।

दोनों विचार - sys.procedures और sys.schemas - इसमें कुछ और विशेषताएं हैं - यदि आपको उनकी आवश्यकता हो, तो उन्हें जांचें, उन्हें अपनी क्वेरी में शामिल करें।

+0

आपके सुझाव के लिए धन्यवाद। मैं एक विशिष्ट डेटाबेस के लिए सभी संग्रहीत प्रक्रियाओं और उनके स्कीमा को सूचीबद्ध करने के लिए इसका उपयोग कैसे करूं? – daniness

+0

@daniness: उस डेटाबेस पर जाएं ('उपयोग (yourdatabase)') और फिर इस स्निपेट को निष्पादित करें कोड। यह केवल उस डेटाबेस के विरुद्ध काम करता है जिसमें आप वर्तमान में हैं। –

24
SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]), 
    name 
FROM sys.procedures; 

या

SELECT [schema] = SCHEMA_NAME([schema_id]), 
    name 
FROM sys.procedures; 

एक विशिष्ट डेटाबेस के लिए, आप बस पहले कि डेटाबेस के लिए संदर्भ बदल सकते हैं, या मार्क के प्रश्न थोड़ा परिवर्तन (क्योंकि वे कार्यों पर भरोसा करते हैं मेरे प्रश्नों कोई इस मामले में अच्छा कर रहे हैं संदर्भ के प्रति संवेदनशील) हैं कि:

SELECT 
    SchemaName = s.name, 
    ProcedureName = pr.name 
FROM 
    databasename.sys.procedures pr 
INNER JOIN 
    databasename.sys.schemas s ON pr.schema_id = s.schema_id; 

आप सभी डेटाबेस के लिए यह करने के लिए करना चाहते हैं:

DECLARE @sql NVARCHAR(MAX) = N''; 

SELECT @sql += N' 
    UNION ALL SELECT db = N''' + name + ''', 
    s.name COLLATE Latin1_General_CI_AI, 
    o.name COLLATE Latin1_General_CI_AI 
    FROM ' + QUOTENAME(name) + '.sys.procedures AS o 
    INNER JOIN ' + QUOTENAME(name) + '.sys.schemas AS s 
    ON o.[schema_id] = s.[schema_id]' 
FROM sys.databases 
-- WHERE ... -- probably don't need system databases at least 

SELECT @sql = STUFF(@sql, 1, 18, '') 
    -- you may have to adjust ^^ 18 due to copy/paste, cr/lf, tabs etc 
    + ' ORDER BY by db, s.name, o.name'; 

EXEC sp_executesql @sql; 

यदि आपके पास विभिन्न कॉलेशन के साथ डेटाबेस हैं तो कोलेट क्लॉज आवश्यक हैं।

2

इस sys.procedures से आप मदद कर सकते हैं ..

चुनें *;

+0

यह सभी प्रक्रियाओं को वापस नहीं करेगा। –

0

आप उन्हें प्राप्त करने के लिए स्क्रिप्ट जनरेटर का उपयोग कर सकते हैं। बाएं पैन में उस डेटाबेस पर क्लिक करें जिसके लिए आप संग्रहीत प्रक्रियाएं प्राप्त करना चाहते हैं, कार्य-> स्क्रिप्ट उत्पन्न करें अगला क्लिक करें और विशिष्ट डेटाबेस ऑब्जेक्ट का चयन करें और संग्रहीत प्रक्रियाओं का चयन करें और अगले पर क्लिक करें, वहां आप कस्टमाइज़ कर सकते हैं क्योंकि आपको आवश्यकता है और उत्पन्न करना है स्क्रिप्ट।

0

इस प्रयास करें:

execute [sys].[sp_stored_procedures] 

या यह कोशिश करते हैं और यह भी सभी मापदंडों मिलती है:

execute [sys].[sp_sproc_columns] 

ठीक है ... आप इस के साथ सभी डीबी कैटलॉग नामों लूप करने के लिए है, लेकिन जाएगा। ..

0
SELECT name,crdate FROM dbo.sysobjects WHERE (type = 'P') order by name 

SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),name FROM sys.procedures; 

select OBJECT_SCHEMA_NAME([object_id]) as 'SchemaName',name as 'SP Name ' , 

create_date,modify_date FROM sys.procedures order by OBJECT_SCHEMA_NAME([object_id]), name 
+1

इसमें कुछ विवरण जोड़ें, यह क्यों काम करेगा और यह कैसे काम करता है। – piyushj

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