Thema Datum  Von Nutzer Rating
Antwort
Rot Alles Durchsuchen, Datenbanken, Tabellen, Dateien im Filesystem
28.05.2026 13:06:58 SQL Repo
NotSolved

Ansicht des Beitrags:
Von:
SQL Repo
Datum:
28.05.2026 13:06:58
Views:
4
Rating: Antwort:
  Ja
Thema:
Alles Durchsuchen, Datenbanken, Tabellen, Dateien im Filesystem

so kann man alle datenbanken, alle tabellen und dateien nach einer zeichenfolge durchsuchen:

 

$search = 'gesuchte Zeichenfolge'
$path   = 'D:\'

Get-ChildItem -Path $path -Recurse -File -ErrorAction SilentlyContinue |
Where-Object { $_.Extension -in '.config','.xml','.ini','.json','.txt','.cfg','.conf','.properties','.yaml','.yml','.bat','.cmd','.ps1' } |
Select-String -Pattern $search -SimpleMatch |
Select-Object Path, LineNumber, Line

 

 

SET NOCOUNT ON;

DECLARE @Search  NVARCHAR(4000) = N'gesuchte Zeichenfolge';
DECLARE @Pattern NVARCHAR(4000) = N'%' + @Search + N'%';

IF OBJECT_ID('tempdb..#Columns') IS NOT NULL DROP TABLE #Columns;
IF OBJECT_ID('tempdb..#Results') IS NOT NULL DROP TABLE #Results;
IF OBJECT_ID('tempdb..#Errors')  IS NOT NULL DROP TABLE #Errors;

CREATE TABLE #Columns
(
    DatabaseName SYSNAME,
    SchemaName   SYSNAME,
    TableName    SYSNAME,
    ColumnName   SYSNAME,
    DataType     SYSNAME
);

CREATE TABLE #Results
(
    DatabaseName SYSNAME,
    SchemaName   SYSNAME,
    TableName    SYSNAME,
    ColumnName   SYSNAME,
    MatchCount   BIGINT
);

CREATE TABLE #Errors
(
    DatabaseName SYSNAME NULL,
    SchemaName   SYSNAME NULL,
    TableName    SYSNAME NULL,
    ColumnName   SYSNAME NULL,
    ErrorMessage NVARCHAR(4000)
);

DECLARE @Db  SYSNAME;
DECLARE @Sql NVARCHAR(MAX);

--------------------------------------------------------------------------------
-- 1) Alle durchsuchbaren Spalten aus allen User-Datenbanken sammeln
--------------------------------------------------------------------------------
DECLARE db_cursor CURSOR LOCAL FAST_FORWARD FOR
SELECT name
FROM sys.databases
WHERE state_desc = 'ONLINE'
  AND database_id > 4
  AND source_database_id IS NULL;

OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @Db;

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @Sql = N'
    USE ' + QUOTENAME(@Db) + N';

    INSERT INTO #Columns (DatabaseName, SchemaName, TableName, ColumnName, DataType)
    SELECT
        DB_NAME(),
        s.name,
        t.name,
        c.name,
        ty.name
    FROM sys.tables t
    INNER JOIN sys.schemas s
        ON s.schema_id = t.schema_id
    INNER JOIN sys.columns c
        ON c.object_id = t.object_id
    INNER JOIN sys.types ty
        ON ty.user_type_id = c.user_type_id
    WHERE t.is_ms_shipped = 0
      AND c.is_computed = 0
      AND ty.name IN (N''char'', N''varchar'', N''nchar'', N''nvarchar'', N''text'', N''ntext'', N''xml'');';

    BEGIN TRY
        EXEC (@Sql);
    END TRY
    BEGIN CATCH
        INSERT INTO #Errors (DatabaseName, ErrorMessage)
        VALUES (@Db, ERROR_MESSAGE());
    END CATCH;

    FETCH NEXT FROM db_cursor INTO @Db;
END

CLOSE db_cursor;
DEALLOCATE db_cursor;

--------------------------------------------------------------------------------
-- 2) Jede gefundene Spalte durchsuchen
--------------------------------------------------------------------------------
DECLARE
    @Schema     SYSNAME,
    @Table      SYSNAME,
    @Column     SYSNAME,
    @DataType   SYSNAME,
    @MatchCount BIGINT;

DECLARE col_cursor CURSOR LOCAL FAST_FORWARD FOR
SELECT DatabaseName, SchemaName, TableName, ColumnName, DataType
FROM #Columns
ORDER BY DatabaseName, SchemaName, TableName, ColumnName;

OPEN col_cursor;
FETCH NEXT FROM col_cursor INTO @Db, @Schema, @Table, @Column, @DataType;

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @Sql = N'
    SELECT @MatchCountOUT = COUNT_BIG(*)
    FROM ' + QUOTENAME(@Db) + N'.' + QUOTENAME(@Schema) + N'.' + QUOTENAME(@Table) + N' WITH (NOLOCK)
    WHERE CONVERT(NVARCHAR(4000), ' + QUOTENAME(@Column) + N') LIKE @Pattern;';

    BEGIN TRY
        SET @MatchCount = 0;

        EXEC sp_executesql
            @Sql,
            N'@Pattern NVARCHAR(4000), @MatchCountOUT BIGINT OUTPUT',
            @Pattern = @Pattern,
            @MatchCountOUT = @MatchCount OUTPUT;

        IF @MatchCount > 0
        BEGIN
            INSERT INTO #Results (DatabaseName, SchemaName, TableName, ColumnName, MatchCount)
            VALUES (@Db, @Schema, @Table, @Column, @MatchCount);
        END
    END TRY
    BEGIN CATCH
        INSERT INTO #Errors (DatabaseName, SchemaName, TableName, ColumnName, ErrorMessage)
        VALUES (@Db, @Schema, @Table, @Column, ERROR_MESSAGE());
    END CATCH;

    FETCH NEXT FROM col_cursor INTO @Db, @Schema, @Table, @Column, @DataType;
END

CLOSE col_cursor;
DEALLOCATE col_cursor;

--------------------------------------------------------------------------------
-- 3) Treffer
--------------------------------------------------------------------------------
SELECT
    DatabaseName,
    SchemaName,
    TableName,
    ColumnName,
    MatchCount
FROM #Results
ORDER BY MatchCount DESC, DatabaseName, SchemaName, TableName, ColumnName;

--------------------------------------------------------------------------------
-- 4) Fehler
--------------------------------------------------------------------------------
SELECT *
FROM #Errors
ORDER BY DatabaseName, SchemaName, TableName, ColumnName;


(hier muss evtl. eine fehlerhafte spalte aus dem script entfernt werden)


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Alles Durchsuchen, Datenbanken, Tabellen, Dateien im Filesystem
28.05.2026 13:06:58 SQL Repo
NotSolved