Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête SQL pour trouver un nom de colonne dans toute la base de données

Donc, si vous utilisez SQL Server, vous pouvez l'exécuter pour trouver toutes les colonnes de toutes les tables.

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

En utilisant la sortie de cette requête, vous créez une liste de toutes les combinaisons possibles de SELECTS pour chaque colonne de chaque table.

Cela affiche simplement la liste de toutes les commandes, vous devez maintenant les exécuter. Afin d'exécuter chaque commande, vous devez créer un curseur qui parcourra toute la liste des résultats.

Vous allez entourer le précédent SELECT avec un curseur pour parcourir chaque requête et l'exécuter. Ainsi, le code devient quelque chose comme ça

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