ホームページ > データベース > mysql チュートリアル > SQL Server データベース内のすべてのテーブルと列にわたって文字列を効率的に検索するにはどうすればよいですか?

SQL Server データベース内のすべてのテーブルと列にわたって文字列を効率的に検索するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-05 19:15:42
オリジナル
709 人が閲覧しました

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

データベース迷路での文字列の検索: SQL Server の冒険

広大なデータベースをナビゲートするのは、特に次のような場合には困難を伴うことがあります。特定のデータのソースを見つけようとしています。 SQL Server 2005 は、この課題に対する堅牢なソリューション、つまりすべてのテーブル、行、列にわたる包括的な検索を提供します。

この検索を開始するには、提供されているコードを詳しく調べてみましょう:

DECLARE
    @search_string  VARCHAR(100),
    @table_name     SYSNAME,
    @table_schema   SYSNAME,
    @column_name    SYSNAME,
    @sql_string     VARCHAR(2000)
ログイン後にコピー

まず、検索文字列、テーブル情報、SQL を格納する変数を宣言します。

SET @search_string = 'Test'
ログイン後にコピー

次に、テーブルと列を反復処理するカーソルを定義します。

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
ログイン後にコピー

検索をベース テーブルに限定し、次のように null 以外の照合順序を持つ列に焦点を当てます。これらは文字列のみにあります。

メイン ループはテーブルを反復し、 columns:

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
ログイン後にコピー

テーブルと列の組み合わせごとに、指定された文字列を検索して結果を出力する SQL クエリを構築します。

注意事項:

このアプローチは効果的ですが、次の点があります。欠点:

  • 特に大規模なデータベースの場合、遅いことで有名です。
  • エラー処理が実装されておらず、ずさんな部分が存在する可能性があります。
  • 十分な情報を得るには、データベースの専門家に相談する必要があります。データベースの複雑な性質を理解し、重複やその他の隠れたものを回避します。

代替アプローチ:

大規模なデータベースを検索するためのもう 1 つのオプションは、全文検索 (FTS) を使用することです。 FTS はこの目的のために設計されており、上記のコードよりもはるかに高速です。ただし、データベースが FTS 用に構成されている必要があります。

以上がSQL Server データベース内のすべてのテーブルと列にわたって文字列を効率的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート