Heim > Datenbank > MySQL-Tutorial > Wie kann man effizient nach Zeichenfolgen in allen Tabellen einer SQL Server-Datenbank suchen?

Wie kann man effizient nach Zeichenfolgen in allen Tabellen einer SQL Server-Datenbank suchen?

Susan Sarandon
Freigeben: 2025-01-15 08:26:42
Original
865 Leute haben es durchsucht

How to Efficiently Search for Strings Across All Tables in a SQL Server Database?

Suchen von Zeichenfolgen in allen Tabellen einer SQL Server-Datenbank

Diese Anleitung zeigt eine Methode zum Suchen nach einer bestimmten Zeichenfolge (z. B. „John“) in allen Tabellen einer SQL Server-Datenbank. Wir verwenden eine Tabellenvariable und eine Ad-hoc-Abfrage, eine Technik, die für Umgebungen mit Einschränkungen für temporäre Tabellen oder gespeicherte Prozeduren geeignet ist. Beachten Sie, dass dieser Ansatz erfordert, dass Ihre SQL Server-Instanz Tabellenvariablen unterstützt. Die USE-Anweisung beschränkt die Suche auf eine bestimmte Datenbank.

<code class="language-sql">USE DATABASE_NAME

DECLARE @SearchStr nvarchar(100) = 'john'
DECLARE @Results TABLE (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET  @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

WHILE @TableName IS NOT NULL
BEGIN
    SET @ColumnName = ''
    SET @TableName = 
    (
        SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
        FROM     INFORMATION_SCHEMA.TABLES
        WHERE         TABLE_TYPE = 'BASE TABLE'
            AND    QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
            AND    OBJECTPROPERTY(
                    OBJECT_ID(
                        QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
                         ), 'IsMSShipped'
                           ) = 0
    )

    WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
    BEGIN
        SET @ColumnName =
        (
            SELECT MIN(QUOTENAME(COLUMN_NAME))
            FROM     INFORMATION_SCHEMA.COLUMNS
            WHERE         TABLE_SCHEMA    = PARSENAME(@TableName, 2)
                AND    TABLE_NAME    = PARSENAME(@TableName, 1)
                AND    DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal')
                AND    QUOTENAME(COLUMN_NAME) > @ColumnName
        )

        IF @ColumnName IS NOT NULL
        BEGIN
            INSERT INTO @Results
            EXEC
            (
                'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) 
                FROM ' + @TableName + ' (NOLOCK) ' +
                ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
            )
        END
    END    
END

SELECT ColumnName, ColumnValue FROM @Results</code>
Nach dem Login kopieren

Beim Ausführen dieser Abfrage wird eine Liste von Tabellen und Zeilen zurückgegeben, die die Suchzeichenfolge enthalten.

Das obige ist der detaillierte Inhalt vonWie kann man effizient nach Zeichenfolgen in allen Tabellen einer SQL Server-Datenbank 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