Untitled
-- Deklaracja zmiennej dla dynamicznego zapytania SQL DECLARE @sql NVARCHAR(MAX) = N''; -- Deklaracja zmiennych dla nazw tabel i kolumn DECLARE @table NVARCHAR(MAX); DECLARE @column NVARCHAR(MAX); -- Tworzymy kursor do iteracji przez wszystkie tekstowe kolumny w bazie danych DECLARE column_cursor CURSOR FOR SELECT TABLE_NAME, -- Nazwa tabeli COLUMN_NAME -- Nazwa kolumny FROM INFORMATION_SCHEMA.COLUMNS -- Widok systemowy zawierający metadane o kolumnach WHERE DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'text', 'ntext'); -- Wybór tylko tekstowych typów danych -- Otwieramy kursor OPEN column_cursor; -- Pobieramy pierwszy wiersz z kursora i zapisujemy wartości do zmiennych FETCH NEXT FROM column_cursor INTO @table, @column; -- Pętla przetwarzająca wszystkie wiersze kursora WHILE @@FETCH_STATUS = 0 -- @@FETCH_STATUS sprawdza, czy FETCH zakończył się sukcesem BEGIN -- Dodajemy zapytanie SQL do zmiennej @sql dla bieżącej tabeli i kolumny SET @sql += 'SELECT ''' + @table + ''' AS TableName, ''' + @column + ''' AS ColumnName, ' + @column + ' AS FoundValue ' + -- Wartość znaleziona w kolumnie 'FROM ' + @table + ' ' + -- Źródło danych (tabela) 'WHERE ' + @column + ' LIKE ''%admin%'' UNION ALL '; -- Warunek wyszukiwania (szukamy tekstu "admin") -- Pobieramy kolejny wiersz z kursora FETCH NEXT FROM column_cursor INTO @table, @column; END -- Zamykamy kursor po zakończeniu iteracji CLOSE column_cursor; -- Usuwamy kursor z pamięci DEALLOCATE column_cursor; -- Usuwamy ostatnie 'UNION ALL', które nie jest potrzebne na końcu zapytania SET @sql = LEFT(@sql, LEN(@sql) - 10); -- Wykonujemy dynamicznie zbudowane zapytanie EXEC sp_executesql @sql;
Leave a Comment