Ich möchte einen Text aus allen gespeicherten Datenbankprozeduren suchen. Ich benutze 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 [ABD]
in allen gespeicherten Prozeduren einschließlich eckiger Klammern suchen , aber es gibt nicht das richtige Ergebnis. Wie kann ich meine Abfrage ändern, um dies zu erreichen?
sql
sql-server
stored-procedures
DharaPPatel
quelle
quelle
SCHEMA_NAME(o.schema_id) AS Schema_Name
zur select-Klausel hinzufügen .Versuchen Sie diese Anfrage:
Abfrage
quelle
Haben Sie versucht, einige Tools von Drittanbietern für die Suche zu verwenden? Es gibt mehrere, die kostenlos sind und mir in der Vergangenheit eine Menge Zeit gespart haben.
Unten sind zwei SSMS-Addins aufgeführt, die ich mit gutem Erfolg verwendet habe.
ApexSQL Search - Durchsucht sowohl Schema als auch Daten in Datenbanken und bietet zusätzliche Funktionen wie Abhängigkeitsverfolgung und mehr…
SSMS Tools Pack - Hat die gleiche Suchfunktion wie die vorherige und mehrere andere coole Funktionen. Nicht kostenlos für SQL Server 2012, aber dennoch sehr erschwinglich.
Ich weiß, dass diese Antwort nicht zu 100% mit den Fragen zusammenhängt (was spezifischer war), aber hoffentlich finden andere dies nützlich.
quelle
Normalerweise führe ich Folgendes aus, um dies zu erreichen:
quelle
Gute Praxis für die Arbeit mit SQL Server.
Erstellen Sie die unten gespeicherte Prozedur und setzen Sie den Kurzschlüssel.
Jetzt - Stellen Sie die Kurztaste wie folgt ein:
Also das nächste Mal , wenn Sie wollen , wie einen bestimmten Text in einem der vier Objekte finden
Store procedure
,Views
,Functions
undTables
. Sie müssen nur dieses Schlüsselwort schreiben und die Tastenkombination drücken.Beispiel: Ich möchte nach "PaymentTable" suchen und dann "PaymentTable" schreiben und sicherstellen, dass Sie das geschriebene Schlüsselwort im Abfrageeditor auswählen oder markieren und die Tastenkombination drücken
ctrl+4
. Dadurch erhalten Sie das vollständige Ergebnis.quelle
Procedure or function 'Searchinall' expects parameter '@strFind', which was not supplied
Irgendwelche Ideen?Die SQL-Suche von Redgate ist ein großartiges Tool dafür. Es ist ein kostenloses Plugin für SSMS.
quelle
Bitte nehmen Sie dies als "schmutzige" Alternative, aber dies hat mich viele Male gerettet, besonders wenn ich mit dem DB-Projekt nicht vertraut war. Manchmal versuchen Sie, in allen SPs nach einer Zeichenfolge zu suchen, und vergessen, dass sich ein Teil der zugehörigen Logik möglicherweise zwischen Funktionen und Triggern versteckt hat oder einfach anders formuliert ist, als Sie gedacht haben.
In Ihrem MSSMS können Sie mit der rechten Maustaste auf Ihre Datenbank klicken und den
Tasks -> Generate Scripts
Assistenten auswählen, um alle SPs, Fns und Trigger in einer einzigen SQL-Datei auszugeben.Stellen Sie sicher, dass Sie auch Trigger auswählen!
Verwenden Sie dann einfach Sublime oder Notepad , um nach der Zeichenfolge zu suchen, die Sie suchen müssen. Ich weiß, dass dies ein ziemlich ineffizienter und paranoider Ansatz ist, aber er funktioniert :)
quelle
Sie können auch dieses verwenden:
quelle
INFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITION
nur die ersten 4000 Zeichen der Routine.Es könnte dir helfen!
quelle
quelle
quelle
Sie können auch verwenden:
Das beinhaltet Kommentare
quelle
OBJECT_NAME ([id]) -> Objektname (Ansicht, Speicherprozedur, Skalarfunktion, Name der Tabellenfunktion)
id (int) = Objektidentifikationsnummer
xtype char (2) Objekttyp. Kann einer der folgenden Objekttypen sein:
FN = Skalarfunktion
P = Gespeicherte Prozedur
V = Ansicht
TF = Tabellenfunktion
quelle
Ich habe eine Prozedur zum Suchen von Text in Prozeduren / Funktionen, Tabellen, Ansichten oder Jobs erstellt. Der erste Parameter @search ist das Suchkriterium, @target das Suchziel, dh Prozeduren, Tabellen usw. Wenn nicht angegeben, suchen Sie alle. @db gibt die zu durchsuchende Datenbank an, standardmäßig Ihre aktuelle Datenbank. Hier ist meine Abfrage in dynamischem SQL.
quelle
Verwenden von CHARINDEX :
Verwenden von PATINDEX :
Die Verwendung dieses Doppels
[[]ABD]
ähnelt der Flucht:quelle
Versuchen Sie auch Folgendes:
quelle
quelle
Diese Abfrage ist Suchtext in gespeicherter Prozedur aus allen Datenbanken.
quelle
quelle
Von Zeit zu Zeit verwende ich dieses Skript, um herauszufinden, welche Prozesse geändert werden müssen, oder um herauszufinden, was eine Tabellenspalte oder diese Tabelle überhaupt verwendet, um alten Müll zu entfernen. Es überprüft jede Datenbank auf der Instanz, auf der sie ausgeführt wird, von der wunderbar bereitgestellten sp_msforeachdb.
quelle
quelle
Sie können auch verwenden
und dann laufen
quelle