sql >> データベース >  >> RDS >> Sqlserver

DB のすべてのテーブル、行、および列で文字列を検索します

    このコードは SQL 2005 でそれを行う必要がありますが、いくつかの注意事項があります:

    <オール> <リ>

    それは途方もなく遅いです。ほんの一握りのテーブルしかない小さなデータベースでテストしましたが、完了するまでに何分もかかりました。データベースが大きすぎて理解できない場合、これはおそらく使用できません。

    <リ>

    私は袖口からこれを書きました。特にカーソルを頻繁に使用しないため、エラー処理は一切行っていません。たとえば、列カーソルを毎回閉じる/割り当て解除/再作成する代わりに、列カーソルを更新する方法があると思います。

    データベースを理解できない場合や、データがどこから来ているのかわからない場合は、理解できる人を見つける必要があります。データの場所がわかったとしても、どこかに重複している可能性や、理解できないデータベースの別の側面がある可能性があります。社内に誰もデータベースを理解していない場合、かなり混乱しています。

    DECLARE
        @search_string  VARCHAR(100),
        @table_name     SYSNAME,
        @table_schema   SYSNAME,
        @column_name    SYSNAME,
        @sql_string     VARCHAR(2000)
    
    SET @search_string = 'Test'
    
    DECLARE tables_cur CURSOR FOR SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
    
    OPEN tables_cur
    
    FETCH NEXT FROM tables_cur INTO @table_schema, @table_name
    
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
        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  -- Only strings have this and they always have it
    
        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
    


    1. RDSインスタンス上のデータベースを使用したEc2インスタンスへのWordpressのインストール

    2. テーブルへの重複挿入を防ぐ方法

    3. Pyodbc-データソース名が見つからず、デフォルトのドライバーが指定されていません

    4. PHP:LOADDATAINFILE構文エラー