नाम से संग्रहीत प्रक्रिया का पता लगाएं


84

क्या कोई ऐसा तरीका है जिसे मैं SQL सर्वर प्रबंधन स्टूडियो में नाम या भाग के नाम से संग्रहीत प्रक्रिया में पा सकता हूं? (सक्रिय डेटाबेस संदर्भ पर)

मदद के लिए शुक्रिया

जवाबों:


142

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

select * 
from 
   sys.procedures 
where 
   name like '%name_of_proc%'

यदि आपको कोड की आवश्यकता है तो आप syscomments तालिका में देख सकते हैं

select text 
from 
    syscomments c
    inner join sys.procedures p on p.object_id = c.object_id
where 
    p.name like '%name_of_proc%'

अपडेट संपादित करें:

तुम भी एएनएसआई मानक संस्करण का उपयोग कर सकते हैं

SELECT * 
FROM 
    INFORMATION_SCHEMA.ROUTINES 
WHERE 
    ROUTINE_NAME LIKE '%name_of_proc%'

1
यदि आप नाम के साथ सपा का पाठ प्राप्त करना चाहते हैं, तो "sp_helptext SPNAME" का उपयोग करना आसान है
हैरी सुरशोग

2
Sql 2012, inner join sys.procedures p on p.object_id = c.idइसके बजाय करना था
user5226582

1
SQL सर्वर के लिए नोट ANSI मानक संस्करण 8k पर ROUTINE_DEFINITION काट देता है। आप object_definition(object_id(r.ROUTINE_NAME)),इसे एक विकल्प के रूप में उपयोग कर सकते हैं जो एक मुद्दा है।
मार्क शुल्त्स

एएनएसआई मानक संस्करण के लिए +1 जो मामले में कैटलॉग (डेटाबेस) और स्कीमा लौटाता है, आप सुनिश्चित नहीं हैं कि प्रक्रिया कहां बैठती है। (उदाहरण के अनुसार, मैंने एक एजेंट को एक ऐसी प्रक्रिया का उल्लेख करते हुए पाया, जिसका मैं आसानी से पता नहीं लगा सका; ANSI मानक क्वेरी ने मेरे लिए इसे हल कर दिया)।
youcantryreachingme

42

मान लें कि आप ऑब्जेक्ट एक्सप्लोरर विवरण ( F7) में संग्रहीत कार्यविधियों की सूची दिखा रहे हैं, फ़िल्टर बटन पर क्लिक करें और नाम (या आंशिक नाम) दर्ज करें।

वैकल्पिक शब्द


2
बहुत बहुत धन्यवाद मैं फिल्टर बात के बारे में नहीं जानता था किसी भी तरह मैंने उस बटन को कभी नहीं देखा।
चाड पोर्टमैन

5

यह तालिकाओं और विचारों (अन्य चीजों के अलावा) के लिए काम करेगा, न कि केवल स्पार्क्स:

SELECT
    '[' + s.name + '].[' + o.Name + ']',
    o.type_desc
FROM
    sys.objects o
    JOIN sys.schemas s ON s.schema_id = o.schema_id
WHERE
    o.name = 'CreateAllTheThings' -- if you are certain of the exact name
    OR o.name LIKE '%CreateAllThe%' -- if you are not so certain

यह आपको स्कीमा नाम भी देता है जो किसी भी गैर-तुच्छ डेटाबेस में उपयोगी होगा (जैसे कि जहां आपको नाम से संग्रहीत प्रक्रिया खोजने के लिए क्वेरी की आवश्यकता है)।


1
2005 से 2016 तक एक विरासत ऐप को माइग्रेट करने से मेरी स्क्रिप्ट को '@errorMessage' के पास 'गलत सिंटैक्स' मिला, जो बहुत मददगार नहीं था। जब मैंने SSSM में एक ही sql चलाया, तो इसने "प्रक्रिया 'some_name' में जोड़ दिया, लेकिन कहीं भी ऐसी कोई संग्रहीत प्रक्रिया नहीं थी! यह एक ट्रिगर था, और आपकी क्वेरी ने इसे ढूंढ लिया। धन्यवाद!
मिकीफ़ेगैन_एफ़र एक्सिट ओफ़्सो

1

आप इस क्वेरी का उपयोग कर सकते हैं:

SELECT 
    ROUTINE_CATALOG AS DatabaseName ,
    ROUTINE_SCHEMA AS SchemaName,
    SPECIFIC_NAME AS SPName ,
    ROUTINE_DEFINITION AS SPBody ,
    CREATED AS CreatedDate,
    LAST_ALTERED AS LastModificationDate
FROM INFORMATION_SCHEMA.ROUTINES
WHERE 
    (ROUTINE_DEFINITION LIKE '%%')
    AND 
    (ROUTINE_TYPE='PROCEDURE')
    AND
    (SPECIFIC_NAME LIKE '%AssessmentToolDegreeDel')

जैसा कि आप देख सकते हैं, आप संग्रहीत प्रक्रिया के शरीर के अंदर भी खोज कर सकते हैं।


0

बहुत साफ-सुथरी चाल मैं कुछ एसक्यूएल इंजेक्शन की कोशिश में ठोकर खाता हूं, खोज बॉक्स में ऑब्जेक्ट एक्सप्लोरर में सिर्फ आपके प्रतिशत पात्रों का उपयोग करें, और यह संग्रहीत प्रक्रियाओं, कार्यों, विचारों, तालिकाओं, स्कीमा, अनुक्रमित की खोज करेगा ... मैं और अधिक के बारे में सोचकर थक गया :)

खोज पैटर्न


0

जब मेरे पास एक स्टोर प्रक्रिया का नाम है, और यह नहीं जानता कि यह किस डेटाबेस से संबंधित है, तो मैं निम्नलिखित का उपयोग करता हूं -

Use [master]
GO

DECLARE @dbname VARCHAR(50)   
DECLARE @statement NVARCHAR(max)

DECLARE db_cursor CURSOR 
LOCAL FAST_FORWARD
FOR  
--Status 48 (mirrored db)
SELECT name FROM MASTER.dbo.sysdatabases WHERE STATUS NOT LIKE 48 AND name NOT IN ('master','model','msdb','tempdb','distribution')  

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @dbname  
WHILE @@FETCH_STATUS = 0  
BEGIN  

SELECT @statement = 'SELECT * FROM ['+@dbname+'].INFORMATION_SCHEMA.ROUTINES  WHERE [ROUTINE_NAME] LIKE ''%name_of_proc%'''+';'
print @statement

EXEC sp_executesql @statement

FETCH NEXT FROM db_cursor INTO @dbname  
END  
CLOSE db_cursor  
DEALLOCATE db_cursor

0

SQL सर्वर संस्करण 9.0 (2005) के लिए, आप नीचे दिए गए कोड का उपयोग कर सकते हैं:

select * 
from 
syscomments c
inner join sys.procedures p on p.object_id = c.id
where 
p.name like '%usp_ConnectionsCount%';

0

विकल्प 1: SSMS में View > Object Explorer DetailsF7 पर जाएं या दबाएँ। Searchबॉक्स का उपयोग करें । अंत में प्रदर्शित सूची में राइट क्लिक करें और ट्री Synchronizeमें ऑब्जेक्ट को खोजने के लिए चुनें Object Explorer

ऑब्जेक्ट एक्सप्लोरर विवरण

विकल्प 2: जैसे ऐड-ऑन स्थापित करें dbForge Search। प्रदर्शित सूची पर राइट क्लिक करें और चुनें Find in Object Explorer

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.