Ein SELECT auf mehrere Tabellen einer Datenbank ausführen



  • Ahoi alle zusammen!

    Ich habe ein Frage bezüglich dem Durchsuchen mehreren Tabellen in einer Datenbank. Gibt es eine Möglichkeit (unabhängig davon wieviele Tabellen es gibt), eine kleine Abfrage zu machen die sagen wir mal die Spalte X nach dem String Y durchsucht?

    SELECT Autokennzeichen FROM * WHERE Fahrer="Hans";
    


  • Mit dynamic SQL geht das. Vorausgesetzt der DB-Server hat die (soweit ich weiss standardisierten) INFORMATION_SCHEMA Views.

    Sieht dann z.B. so aus:

    DECLARE @haystackColumn NVARCHAR(max);
    DECLARE @needle NVARCHAR(max);
    DECLARE @selectColumn NVARCHAR(max);
    
    SET @haystackColumn = 'Fahrer';
    SET @needle = 'Hans';
    SET @selectColumn = 'Autokennzeichen';
    
    SET NOCOUNT ON;
    
    DECLARE @query NVARCHAR(max);
    SET @query = '(SELECT null, null, null WHERE 1 = 0) ';
    
    SELECT
    	@query = @query + '
    UNION ALL
    (SELECT ''' + c.TABLE_SCHEMA + ''', ''' + c.TABLE_NAME + ''', '
    		+ '[' + @selectColumn + '] '
    		+ 'FROM [' + c.TABLE_SCHEMA + '].[' + c.TABLE_NAME + '] '
    		+ 'WHERE [' + @haystackColumn + '] = ''' + @needle + ''')'
    
    	FROM INFORMATION_SCHEMA.COLUMNS c
    	WHERE c.COLUMN_NAME = @haystackColumn
    		AND EXISTS (
    			SELECT *
    			FROM INFORMATION_SCHEMA.COLUMNS c2
    			WHERE c2.TABLE_SCHEMA = c.TABLE_SCHEMA
    				AND c2.TABLE_NAME = c.TABLE_NAME
    				AND c2.COLUMN_NAME = @selectColumn)
    	;
    
    -- PRINT @query;
    
    SET NOCOUNT OFF;
    
    EXEC (@query);
    

    Funktioniert mit T-SQL, für andere Systeme sind evtl. anpassungen nötig. Ebenso wenn z.B. Views ausgeschlossen werden sollen. Usw. Proof of Concept halt 🙂


Anmelden zum Antworten