Wie finde ich eine Tabelle in der gesamten Instanz?

7

Ich versuche, einen Bericht zu erstellen, der Daten aus einer aufgerufenen Tabelle auswählt costomersHR. Ich kann es nicht finden, da wir Hunderte von Datenbanken in der Instanz haben.

Wie kann ich in der gesamten Instanz nach einer Tabelle suchen?

Alonk
quelle
3
Vielleicht haben Sie es nicht gewusst, aber wenn Sie eine Antwort erhalten, die Ihnen tatsächlich hilft, haben Sie die Möglichkeit , sie formell zu akzeptieren . Sie können dies sowohl für diese Frage als auch für einige oder alle Ihrer früheren Fragen tun .
Andriy M

Antworten:

17

Um es durch Code zu tun ...

1) Wenn Sie davon ausgehen können, dass sich diese Tabelle im dboSchema befindet.

SELECT name
FROM   sys.databases
WHERE  CASE
         WHEN state_desc = 'ONLINE' 
              THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[costomersHR]', 'U')
       END IS NOT NULL 

2) Andernfalls könnten Sie alle Datenbanken (und Abfragen sys.tablesin jeder) mit so etwas wie diesem Code durchlaufen, um eine zuverlässigere und flexiblere sp_MSforeachdb zu erhalten

Martin Smith
quelle
@ Martin, ich kann nicht verstehen, wie diese case-Anweisung funktioniert. Können Sie mir helfen, sie zu verstehen? Aber ja, es ist mehr als eine erstaunliche Abfrage, ein Objekt zu finden.
AA.SC
1
Zunächst wird überprüft, ob sich die Datenbanken im ONLINE-Status befinden, und wenn dies zutrifft, wird versucht, eine OBJECT_IDVerbindung zur gesuchten Tabelle herzustellen, nach der wir suchen. Wenn der Wert ungleich Null zurückgegeben wird, wird die aufgerufene Tabelle [dbo].[costomersHR]gefunden und die Namen der Datenbanken für übereinstimmende Zeilen zurückgegeben.
Paweł Tajs
@ PawełTajs, wie diese case-Anweisung die Liste aller Objekte für jede Datenbank abruft?
AA.SC
2
@ AA.SC - Das tut es nicht. Es wird lediglich die Existenz eines bestimmten Objekts geprüft. [dbname].[dbo].[costomersHR]für jede Online-Datenbank durch Ersetzen des Datenbanknamens. Die OBJECT_IDFunktion wird zurückgegeben, NULLwenn sie nicht vorhanden ist.
Martin Smith
@MartinSmith, Kann ich diese Abfrage so ändern, dass DB-Namen in Instanzen gesucht werden, die das Schema 'HR' enthalten?
AA.SC