Heim > Datenbank > MySQL-Tutorial > Wie kann ich effizient in allen Tabellen und Spalten einer SQL Server-Datenbank nach einer Zeichenfolge suchen?

Wie kann ich effizient in allen Tabellen und Spalten einer SQL Server-Datenbank nach einer Zeichenfolge suchen?

Patricia Arquette
Freigeben: 2025-01-05 19:15:42
Original
684 Leute haben es durchsucht

How Can I Efficiently Search for a String Across All Tables and Columns in a SQL Server Database?

Suche nach einer Zeichenfolge in einem Datenbanklabyrinth: Ein SQL Server-Abenteuer

Das Navigieren in einer weitläufigen Datenbank kann entmutigend sein, insbesondere wenn Sie es sind versuchen, die Quelle bestimmter Daten zu finden. SQL Server 2005 bietet eine robuste Lösung für diese Herausforderung: eine umfassende Suche über alle Tabellen, Zeilen und Spalten hinweg.

Um mit dieser Suche zu beginnen, vertiefen wir uns in den bereitgestellten Code:

DECLARE
    @search_string  VARCHAR(100),
    @table_name     SYSNAME,
    @table_schema   SYSNAME,
    @column_name    SYSNAME,
    @sql_string     VARCHAR(2000)
Nach dem Login kopieren

Wir beginnen mit der Deklaration von Variablen zum Speichern der Suchzeichenfolge, Tabelleninformationen und SQL-Abfragen.

SET @search_string = 'Test'
Nach dem Login kopieren

Als nächstes definieren wir Cursor für Über Tabellen und Spalten iterieren:

DECLARE tables_cur CURSOR FOR SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'

DECLARE columns_cur CURSOR FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @table_schema AND TABLE_NAME = @table_name AND COLLATION_NAME IS NOT NULL
Nach dem Login kopieren

Wir beschränken die Suche auf Basistabellen und konzentrieren uns auf Spalten mit Nicht-Null-Sortierungen, da diese nur bei Zeichenfolgen vorhanden sind.

Die Hauptschleife iteriert über Tabellen und Spalten:

OPEN tables_cur
FETCH NEXT FROM tables_cur INTO @table_schema, @table_name
WHILE (@@FETCH_STATUS = 0)
BEGIN
    OPEN columns_cur
    FETCH NEXT FROM columns_cur INTO @column_name
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
        SET @sql_string = 'IF EXISTS (SELECT * FROM ' + QUOTENAME(@table_schema) + '.' + QUOTENAME(@table_name) + ' WHERE ' + QUOTENAME(@column_name) + ' LIKE ''%' + @search_string + '%'') PRINT ''' + QUOTENAME(@table_schema) + '.' + QUOTENAME(@table_name) + ', ' + QUOTENAME(@column_name) + ''''
        EXECUTE(@sql_string)
        FETCH NEXT FROM columns_cur INTO @column_name
    END
    CLOSE columns_cur
    DEALLOCATE columns_cur
    FETCH NEXT FROM tables_cur INTO @table_schema, @table_name
END
CLOSE tables_cur
DEALLOCATE tables_cur
Nach dem Login kopieren

Für jede Tabellen-Spalten-Kombination wird eine SQL-Abfrage erstellt, die nach der bereitgestellten Zeichenfolge sucht und diese ausgibt Ergebnis.

Vorbehalte:

Dieser Ansatz ist zwar effektiv, hat aber auch Nachteile:

  • Er ist notorisch langsam, insbesondere bei großen Datenbanken.
  • Fehlerbehandlung ist nicht implementiert und es kann zu Schlamperei kommen existieren.
  • Ein Datenbankexperte sollte konsultiert werden, um die komplexe Natur von Datenbanken vollständig zu verstehen und Duplizierungen oder andere versteckte Herausforderungen zu vermeiden.

Alternativer Ansatz:

Eine weitere Möglichkeit zur Suche in großen Datenbanken ist die Nutzung der Volltextsuche (FTS). FTS wurde für diesen Zweck entwickelt und kann viel schneller sein als der obige Code. Allerdings muss die Datenbank für FTS konfiguriert sein.

Das obige ist der detaillierte Inhalt vonWie kann ich effizient in allen Tabellen und Spalten einer SQL Server-Datenbank nach einer Zeichenfolge suchen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage