Maison >base de données >tutoriel mysql >Comment puis-je rechercher efficacement une chaîne dans toutes les tables et colonnes d'une base de données SQL Server ?
Recherche d'une chaîne dans un labyrinthe de bases de données : une aventure SQL Server
Naviguer dans une base de données tentaculaire peut être intimidant, surtout lorsque vous êtes essayer de localiser la source de données spécifiques. SQL Server 2005 offre une solution robuste pour relever ce défi : une recherche complète dans toutes les tables, lignes et colonnes.
Pour nous lancer dans cette recherche, examinons le code fourni :
DECLARE @search_string VARCHAR(100), @table_name SYSNAME, @table_schema SYSNAME, @column_name SYSNAME, @sql_string VARCHAR(2000)
Nous commençons par déclarer des variables pour stocker la chaîne de recherche, les informations de table et les requêtes SQL.
SET @search_string = 'Test'
Ensuite, nous définissons les curseurs pour parcourir les tables et les colonnes :
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
Nous limitons la recherche aux tables de base et nous concentrons sur les colonnes avec des classements non nuls, car seules les chaînes en ont.
La boucle principale parcourt tables et colonnes :
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
Pour chaque combinaison table-colonne, il construit une requête SQL qui recherche la chaîne fournie et imprime le résultat.
Mises en garde :
Bien qu'efficace, cette approche a ses inconvénients :
Approche alternative :
Une autre option pour effectuer des recherches dans de grandes bases de données consiste à utiliser la recherche en texte intégral (FTS). FTS est conçu à cet effet et peut être beaucoup plus rapide que le code ci-dessus. Cependant, cela nécessite que la base de données soit configurée pour FTS.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!