Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Abfrage, um einen Spaltennamen in der gesamten Datenbank zu finden

Wenn Sie also SQL Server verwenden, können Sie dies ausführen, um alle Spalten in allen Tabellen zu finden.

select
    'SELECT * FROM ' 
     + st.name + 
     ' WHERE ' + 
       sc.name + ' = ''MICROSOFT'' '
from sys.tables st join sys.columns sc on st.object_id = sc.object_id

Indem Sie die Ausgabe dieser Abfrage verwenden, erstellen Sie eine Liste aller möglichen Kombinationen von SELECTS für jede Spalte in jeder Tabelle.

Dies gibt nur die Liste aller Befehle aus, jetzt müssen Sie sie ausführen. Um jeden Befehl auszuführen, müssen Sie einen Cursor erstellen, der über die gesamte Ergebnisliste geht.

Sie werden das vorherige SELECT umgeben -Anweisung mit einem Cursor, um über jede Abfrage zu gehen und sie auszuführen. Somit wird der Code in etwa so

DECLARE @myCommand VARCHAR(1000)

DECLARE c CURSOR READ_ONLY FAST_FORWARD FOR
    select
        'SELECT * FROM ' 
         + st.name + 
         ' WHERE ' + 
           sc.name + ' = ''MICROSOFT'' '
    from sys.tables st join sys.columns sc on st.object_id = sc.object_id
OPEN c

FETCH NEXT FROM c INTO @myCommand
WHILE @@FETCH_STATUS = 0
    BEGIN
        sp_executesql @myCommand
    FETCH NEXT FROM c INTO @myCommand
    END

CLOSE c

DEALLOCATE c