sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-fråga för att hitta ett kolumnnamn i hela databasen

Så om du använder SQL Server kan du köra detta för att hitta alla kolumner i alla tabeller.

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

Genom att använda utdata från denna fråga skapar du en lista över alla möjliga kombinationer av SELECTS för varje kolumn i varje tabell.

Detta matar bara ut listan över alla kommandon, nu måste du köra dem. För att kunna utföra varje kommando måste du skapa en markör som går över hela listan med resultat.

Du kommer att omge den föregående SELECT med en markör för att gå över varje fråga och köra den. Således blir koden ungefär så här

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


  1. Hur man ändrar åtgärd för en främmande nyckel

  2. Ta bort en databaspostprofil (SSMS)

  3. Mysql gör en lagrad procedur från flera lagrade procedurer

  4. Analysera en XML-sträng i MySQL