sql server - über - SQL-Abfrage zum Durchsuchen des Schemas aller Tabellen




sql tabellen abfragen (6)

Das gleiche aber auf ANSI-Art

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN (SELECT TABLE_NAME VON INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'CreateDate')

Ich arbeite an einem SQL Server 2008 Db, der viele Tabellen enthält (etwa 200). Viele dieser Tabellen enthalten ein Feld mit dem Namen "CreatedDate". Ich versuche, das gesamte Tabellenschema mit diesem bestimmten Feld zu identifizieren.

Gibt es dafür eine SQL-Abfrage?


Für mich habe ich nur Lesezugriff, um Querys zu starten, daher muss ich diese Funktion oft verwenden, hier verwende ich:

SELECT  *
FROM    INFORMATION_SCHEMA.TABLES
where   TABLES.TABLE_NAME like '%your table name here%'

Sie können .TABLES mit .COLUMNS ersetzen, dann würde es so aussehen:

 SELECT *
 FROM   INFORMATION_SCHEMA.COLUMNS
 WHERE  columns.COLUMN_NAME like '%your column name here%'

Mein Favorit ...

SELECT objParent.name AS parent, obj.name, col.*
FROM sysobjects obj 
    LEFT JOIN syscolumns col
        ON obj.id = col.id
    LEFT JOIN sysobjects objParent
        ON objParent.id = obj.parent_obj
WHERE col.name LIKE '%Comment%'
   OR obj.name LIKE '%Comment%'

Oben suche ich nach "Kommentar".

Lassen Sie die Prozentzeichen fallen, wenn Sie eine direkte Übereinstimmung wünschen.

Dies durchsucht Tabellen, Felder und Dinge wie Primärschlüsselnamen, Einschränkungen, Ansichten usw.

Und wenn Sie in StoredProcs nach dem Affen mit den Tabellen suchen wollen (und die Procs anpassen müssen), verwenden Sie Folgendes ...

SELECT name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Comment%'

Hoffe, dass das hilft, finde ich diese zwei Fragen äußerst nützlich.


Sie können dies auch mit einem der vielen Tools von Drittanbietern versuchen, die dafür verfügbar sind.

Abfragen eignen sich hervorragend für einfache Suchen. Wenn Sie jedoch mehr Daten manipulieren müssen, suchen Sie nach Referenzen, und Sie können damit wesentlich bessere Ergebnisse erzielen.

Auch diese sind sehr nützlich, wenn einige Objekte verschlüsselt sind und Sie suchen müssen

Ich benutze ApexSQL Search, die kostenlos ist, aber es gibt auch viele mehr (auch kostenlos) auf dem Markt wie Red Gate oder SSMS Tool Pack.


Verwenden Sie diese Abfrage:

SELECT 
    t.name AS table_name,
    SCHEMA_NAME(schema_id) AS schema_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 '%' + '<ColumnName>' + '%' )
    AND 
    ( t.type = 'U' ) -- Use This To Prevent Selecting System Tables

  select object_name(c.object_id) as table_name
    , schema_name(t.schema_id) as schema_name
    from sys.columns c
    join sys.tables t on c.object_id = t.object_id
     where c.name=N'CreatedDate';

Es wird etwas komplizierter, wenn Sie auch andere Tabelleneigenschaften haben möchten, aber Sie werden auf die Objektkatalogansichten wie sys.tables , sys.columns usw. sys.columns .





database-schema