DBのすべてのテーブル、行、列から文字列を検索する
2023-08-10 03:38:30
質問
私は大きなデータベースで迷子になっており、取得したデータがどこから来たのか見つけることができません。SQL Server 2005 で、データベースのすべてのテーブル、行、および列で文字列を検索することが可能かどうか、疑問に思っています。
それが可能かどうか、また、どのように可能かどうか、どなたかお分かりになりますか?
どのように解決するのですか?
このコードでSQL2005でできるはずですが、いくつか注意点があります。
-
非常に遅いです。私が持っているわずかなテーブルしかない小さなデータベースでテストしたところ、完了するまでに何分もかかりました。もし、あなたのデータベースが理解できないほど大きいのであれば、これはおそらく、いずれにせよ使用不可能でしょう。
-
私はこれを即席で書きました。エラー処理は入れていませんし、特にカーソルを頻繁に使用するわけではないので、他のずさんな部分もあるかもしれません。たとえば、列カーソルを毎回閉じたり、解放したり、再作成したりするのではなく、リフレッシュする方法があると思うのですが。
もしあなたがデータベースを理解できない、あるいは、ものがどこから来るのかわからないのであれば、おそらく理解できる人を見つけるべきです。データがある場所を見つけることができたとしても、それはどこかで重複しているかもしれませんし、データベースの他の側面であなたが理解していないことがあるかもしれません。もし社内で誰もデータベースを理解していなければ、かなり大きな混乱に陥ります。
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
関連
-
org.postgresql.util.PSQLException: ERROR: リレーション "userinfo" の列 "loginid" が存在しません。
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] Oracleの全テーブルのリストを取得しますか?
-
[解決済み] INSERT INTO ...」の部分を繰り返さずに複数行の挿入を行うには?
-
[解決済み] フラットテーブルをツリーにパースする最も効率的/エレガントな方法は何ですか?
-
[解決済み] DISTINCTでCOUNT(*)を選択する
-
[解決済み] 既存のカラムにIDを追加する
-
[解決済み】すべてのテーブル、ストアドプロシージャ、トリガ、制約、およびすべての依存関係を1つのSQLステートメントで削除します。
-
[解決済み】SQL Serverで全テーブルを検索して文字列を見つける。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] LINQでInclude()は何をするのですか?
-
[解決済み] SQLの結合形式 - 入れ子になった内側join
-
[解決済み] SQL Server - 挿入された行のIDを取得するための最良の方法は?
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] 最初の行への結合方法
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] 各グループの上位1行を取得
-
[解決済み] SQLでランダムな行を要求する方法は?
-
[解決済み] "ON UPDATE CASCADE "を使用する場合について
-
[解決済み] SQL/mysql - Select distinct/UNIQUE but return all column?