Ich habe einen Linkserver, der sich ändern wird. Einige Verfahren rufen den Verbindungsserver folgendermaßen auf : [10.10.100.50].dbo.SPROCEDURE_EXAMPLE
. Wir haben Auslöser, die auch diese Art von Arbeit erledigen. Wir müssen alle Orte finden, [10.10.100.50]
an denen sich etwas ändert.
In SQL Server Management Studio Express habe ich in Visual Studio keine Funktion wie "In der gesamten Datenbank suchen" gefunden. Kann mir eine spezielle Systemauswahl helfen, das zu finden, was ich brauche?
sql-server
stored-procedures
triggers
linked-server
Victor Rodrigues
quelle
quelle
type = 'C'
)?Sie können es wie finden
Es werden verschiedene Namen gespeicherter Prozeduren aufgelistet, die Text wie 'Benutzer' in der gespeicherten Prozedur enthalten. Mehr Info
quelle
syscomments
Tabelle die Werte in Blöcken mit 8000 Zeichen speichert. Wenn Sie also das Pech haben, den gesuchten Text über eine dieser Grenzen zu verteilen, werden Sie ihn mit dieser Methode nicht finden.[Späte Antwort, aber hoffentlich nützlich]
Die Verwendung von Systemtabellen führt nicht immer zu 100% korrekten Ergebnissen, da möglicherweise einige gespeicherte Prozeduren und / oder Ansichten verschlüsselt sind. In diesem Fall müssen Sie eine DAC- Verbindung verwenden, um die benötigten Daten abzurufen.
Ich würde empfehlen, ein Drittanbieter-Tool wie ApexSQL Search zu verwenden , mit dem verschlüsselte Objekte problemlos verarbeitet werden können.
Die Syscomments-Systemtabelle gibt den Nullwert für die Textspalte an, falls das Objekt verschlüsselt ist.
quelle
quelle
Dies wird für Sie funktionieren:
quelle
type = 'C'
)?Es gibt viel bessere Lösungen, als den Text Ihrer gespeicherten Prozeduren, Funktionen und Ansichten jedes Mal zu ändern, wenn sich der Verbindungsserver ändert. Hier sind einige Optionen:
Aktualisieren Sie den Verbindungsserver. Anstatt einen Verbindungsserver mit seiner IP-Adresse zu verwenden, erstellen Sie einen neuen Verbindungsserver mit dem Namen der Ressource wie
Finance
oderDataLinkProd
oder einem solchen. Wenn Sie dann ändern müssen, welcher Server erreicht wird, aktualisieren Sie den Verbindungsserver so, dass er auf den neuen Server verweist (oder löschen Sie ihn und erstellen Sie ihn neu).Während Sie leider keine Synonyme für Verbindungsserver oder Schemas erstellen können, können Sie Synonyme für Objekte erstellen, die sich auf Verbindungsservern befinden. Zum Beispiel
[10.10.100.50].dbo.SPROCEDURE_EXAMPLE
könnte Ihre Prozedur einen Alias haben. Vielleicht ein Schema erstellendatalinkprod
, dannCREATE SYNONYM datalinkprod.dbo_SPROCEDURE_EXAMPLE FOR [10.10.100.50].dbo.SPROCEDURE_EXAMPLE;
. Schreiben Sie dann eine gespeicherte Prozedur, die einen Verbindungsservernamen akzeptiert, der alle potenziellen Objekte aus der entfernten Datenbank abfragt und Synonyme für sie (neu) erstellt. Alle Ihre SPs und Funktionen werden nur einmal neu geschrieben, um die Synonymnamen zu verwenden, beginnend mitdatalinkprod
und danach, um von einem Verbindungsserver auf einen anderen zu wechseln,EXEC dbo.SwitchLinkedServer '[10.10.100.51]';
und in Sekundenbruchteilen verwenden Sie einen anderen Verbindungsserver.Möglicherweise gibt es noch mehr Optionen. Ich empfehle dringend, die überlegenen Techniken der Vorverarbeitung, Konfiguration oder Indirektion zu verwenden, anstatt von Menschen geschriebene Skripte zu ändern. Das automatische Aktualisieren von maschinell erstellten Skripten ist in Ordnung. Dies ist eine Vorverarbeitung. Dinge manuell zu machen ist schrecklich.
quelle
quelle
Dieses habe ich in SQL2008 ausprobiert, das von allen Datenbanken auf einmal suchen kann.
quelle
Ich benutze diesen für die Arbeit. Lass die [] weg, obwohl im @ TEXT-Feld, scheint alles zurückgeben zu wollen ...
quelle
Ich habe diese in der Vergangenheit verwendet:
In diesem speziellen Fall, in dem Sie eine bestimmte Zeichenfolge über gespeicherte Prozeduren hinweg ersetzen müssen, ist der erste Link wahrscheinlich relevanter.
Das Quick Find-Add-In ist ein wenig abseits des Themas und auch nützlich für die Suche nach Objektnamen mit SQL Server Management Studio. Es gibt eine modifizierte Version mit einigen Verbesserungen und eine andere neuere Version, die auch auf Codeplex verfügbar ist, mit einigen anderen nützlichen Add-Ins.
quelle
Bei jeder Suche mit der Anweisung select erhalten Sie nur den Objektnamen, in dem das Suchschlüsselwort enthalten ist. Der einfachste und effizienteste Weg ist, ein Skript für die Prozedur / Funktion zu erhalten und dann in der generierten Textdatei zu suchen. Ich folge auch dieser Technik :) Sie sind also genau punktgenau.
quelle
quelle
Ich habe dies gerade für die generische vollständige äußere Kreuzreferenz geschrieben
quelle
Sie können innerhalb der Definitionen aller Datenbankobjekte mit dem folgenden SQL suchen:
quelle