1079 Stimmen

Text in gespeicherter Prozedur in SQL Server suchen

Ich möchte einen Text in allen gespeicherten Prozeduren meiner Datenbank suchen. Ich verwende das folgende SQL:

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 '%[ABD]%';

Ich möchte suchen nach [ABD] in allen gespeicherten Prozeduren, einschließlich eckiger Klammern, aber es liefert nicht das richtige Ergebnis. Wie kann ich meine Abfrage ändern, um dies zu erreichen?

691voto

Mahmoud Gamal Punkte 76107

Lösen Sie die eckigen Klammern:

...
WHERE m.definition Like '%\[ABD\]%' ESCAPE '\'

Dann werden die eckigen Klammern als String-Literale und nicht als Platzhalter behandelt.

434voto

user27332 Punkte 3989

Versuchen Sie diese Anfrage:

Abfrage

SELECT name
FROM   sys.procedures
WHERE  Object_definition(object_id) LIKE '%strHell%'

58voto

David Smithers Punkte 2329

Haben Sie versucht, einige der Tools von Drittanbietern für die Suche zu verwenden? Es gibt mehrere kostenlose Tools, die mir in der Vergangenheit eine Menge Zeit erspart haben.

Im Folgenden finden Sie zwei SSMS-Addins, die ich mit gutem Erfolg verwendet habe.

ApexSQL-Suche - Durchsucht sowohl das Schema als auch die Daten in Datenbanken und verfügt über zusätzliche Funktionen wie die Verfolgung von Abhängigkeiten und mehr

SSMS-Tools-Paket - Verfügt über dieselbe Suchfunktionalität wie die vorherige Version und einige andere coole Funktionen. Nicht kostenlos für SQL Server 2012, aber immer noch sehr erschwinglich.

Ich weiß, dass diese Antwort nicht zu 100 % mit der Frage übereinstimmt (die spezifischer war), aber ich hoffe, dass andere sie nützlich finden.

57voto

Daniel Kelley Punkte 7389

Um dies zu erreichen, führe ich in der Regel die folgenden Schritte aus:

select distinct object_name(id) 
from syscomments 
where text like '%[ABD]%'
order by object_name(id)

44voto

pedram Punkte 6527

Gute Praxis bei der Arbeit mit SQL Server.

Erstellen Sie die folgende gespeicherte Prozedur und setzen Sie den Kurzschlüssel,

CREATE PROCEDURE [dbo].[Searchinall]       
(@strFind AS VARCHAR(MAX))
AS
BEGIN
    SET NOCOUNT ON; 
    --TO FIND STRING IN ALL PROCEDURES        
    BEGIN
        SELECT OBJECT_NAME(OBJECT_ID) SP_Name
              ,OBJECT_DEFINITION(OBJECT_ID) SP_Definition
        FROM   sys.procedures
        WHERE  OBJECT_DEFINITION(OBJECT_ID) LIKE '%'+@strFind+'%'
    END 

    --TO FIND STRING IN ALL VIEWS        
    BEGIN
        SELECT OBJECT_NAME(OBJECT_ID) View_Name
              ,OBJECT_DEFINITION(OBJECT_ID) View_Definition
        FROM   sys.views
        WHERE  OBJECT_DEFINITION(OBJECT_ID) LIKE '%'+@strFind+'%'
    END 

    --TO FIND STRING IN ALL FUNCTION        
    BEGIN
        SELECT ROUTINE_NAME           Function_Name
              ,ROUTINE_DEFINITION     Function_definition
        FROM   INFORMATION_SCHEMA.ROUTINES
        WHERE  ROUTINE_DEFINITION LIKE '%'+@strFind+'%'
               AND ROUTINE_TYPE = 'FUNCTION'
        ORDER BY
               ROUTINE_NAME
    END

    --TO FIND STRING IN ALL TABLES OF DATABASE.    
    BEGIN
        SELECT t.name      AS Table_Name
              ,c.name      AS COLUMN_NAME
        FROM   sys.tables  AS t
               INNER JOIN sys.columns c
                    ON  t.OBJECT_ID = c.OBJECT_ID
        WHERE  c.name LIKE '%'+@strFind+'%'
        ORDER BY
               Table_Name
    END
END

Legen Sie jetzt die Kurztaste wie unten beschrieben fest,

enter image description here

Wenn Sie also das nächste Mal einen bestimmten Text in einem der vier Objekte suchen, wie Store procedure , Views , Functions y Tables . Sie müssen nur das Schlüsselwort eingeben und die Tastenkombination drücken.

Zum Beispiel: Ich möchte nach "PaymentTable" suchen, dann schreiben Sie "PaymentTable" und stellen Sie sicher, dass Sie das geschriebene Schlüsselwort im Abfrage-Editor auswählen oder markieren und die Schnelltaste drücken. ctrl+4 - Sie erhalten ein vollständiges Ergebnis.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X