Untitled

 avatar
unknown
sql
a month ago
1.8 kB
6
Indexable
-- 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