Rechercher des données et des objets dans la base de données MS SQL Server à l'aide de l'utilitaire gratuit de recherche dbForge

Description du besoin général de trouver des données et des objets dans une base de données


La recherche de données, ainsi que de procédures stockées, de tables et d'autres objets dans la base de données est un problème plutôt pertinent, y compris pour les développeurs C #, ainsi que pour le développement .NET en général.

Très souvent, une situation peut survenir dans laquelle vous devez trouver:

  1. objet de base de données (table, vue, procédure stockée, fonction, etc.)
  2. données (valeur et où se trouve la table)
  3. extrait de code dans les définitions d'objets de base de données

Il existe de nombreuses solutions toutes faites, payantes et gratuites.

Tout d'abord, nous verrons comment vous pouvez rechercher des données et des objets dans une base de données à l'aide des outils SGBD intégrés, puis nous verrons comment procéder à l'aide de l'utilitaire gratuit de recherche dbForge .

Recherche à l'aide des outils SGBD intégrés


Vous pouvez déterminer si la table Employee se trouve dans la base de données à l'aide du script suivant:

Rechercher un tableau par nom
select [object_id], [schema_id], schema_name([schema_id]) as [schema_name], [name], [type], [type_desc], [create_date], [modify_date] from sys.all_objects where [name]='Employee'; 


Le résultat pourrait être quelque chose comme ceci:



Ici sont affichés:

  1. identifiants de l'objet et schéma où se trouve l'objet
  2. le nom de ce circuit et le nom de cet objet
  3. type d'objet et description de ce type d'objet
  4. date et heure de création et dernière modification de l'objet

Pour trouver toutes les occurrences de la ligne «Projet», vous pouvez utiliser le script suivant:

Rechercher tous les objets en sous-chaîne dans un nom
 select [object_id], [schema_id], schema_name([schema_id]) as [schema_name], [name], [type], [type_desc], [create_date], [modify_date] from sys.all_objects where [name] like '%Project%'; 


Le résultat pourrait être quelque chose comme ceci:



Comme vous pouvez le voir sur le résultat, ici la sous-chaîne «Project» contient non seulement deux tables Project et ProjectSkill, mais aussi quelques clés primaires et étrangères.

Pour comprendre à qui appartiennent exactement ces clés, nous ajoutons à la sortie le champ parent_object_id et son nom et le schéma dans lequel il se trouve comme suit:

Rechercher tous les objets en sous-chaîne dans le nom avec la sortie des objets parents
 select ao.[object_id], ao.[schema_id], schema_name(ao.[schema_id]) as [schema_name], ao.parent_object_id, p.[schema_id] as [parent_schema_id], schema_name(p.[schema_id]) as [parent_schema_name], p.[name] as [parent_name], ao.[name], ao.[type], ao.[type_desc], ao.[create_date], ao.[modify_date] from sys.all_objects as ao left outer join sys.all_objects as p on ao.[parent_object_id]=p.[object_id] where ao.[name] like '%Project%'; 


Le résultat sera un tableau avec des informations détaillées sur les objets parents, c'est-à-dire où les clés primaires et étrangères sont définies:



Les objets système suivants sont utilisés dans les requêtes:


Nous avons donc trouvé comment trouver des objets dans la base de données à l'aide des outils SGBD intégrés.
Maintenant, nous montrons comment rechercher des données dans la base de données à l'aide de l'exemple de recherche de chaîne.

Pour trouver la valeur de chaîne pour toutes les tables de base de données, vous pouvez utiliser la solution suivante. Nous simplifions cette solution et montrons comment vous pouvez trouver, par exemple, la valeur de «Ramiro» en utilisant le script suivant:

Rechercher des valeurs de chaîne par sous-chaîne dans toutes les tables de base de données
 set nocount on declare @name varchar(128), @substr nvarchar(4000), @column varchar(128) set @substr = '%Ramiro%' declare @sql nvarchar(max); create table #rslt (table_name varchar(128), field_name varchar(128), [value] nvarchar(max)) declare s cursor for select table_name as table_name from information_schema.tables where table_type = 'BASE TABLE' order by table_name open s fetch next from s into @name while @@fetch_status = 0 begin declare c cursor for select quotename(column_name) as column_name from information_schema.columns where data_type in ('text', 'ntext', 'varchar', 'char', 'nvarchar', 'char', 'sysname', 'int', 'tinyint') and table_name = @name set @name = quotename(@name) open c fetch next from c into @column while @@fetch_status = 0 begin --print 'Processing table - ' + @name + ', column - ' + @column set @sql='insert into #rslt select ''' + @name + ''' as Table_name, ''' + @column + ''', cast(' + @column + ' as nvarchar(max)) from' + @name + ' where cast(' + @column + ' as nvarchar(max)) like ''' + @substr + ''''; print @sql; exec(@sql); fetch next from c into @column; end close c deallocate c fetch next from s into @name end select table_name as [Table Name], field_name as [Field Name], count(*) as [Found Mathes] from #rslt group by table_name, field_name order by table_name, field_name drop table #rslt close s deallocate s 


Le résultat de l'exécution peut être comme ceci:



Les noms de table sont affichés ici et dans quelles colonnes est stockée la valeur contenant la sous-chaîne «Ramiro». Ainsi que le nombre d'entrées de cette sous-chaîne trouvées pour la paire table-colonne trouvée.

Pour rechercher des objets dans les définitions dont il existe un morceau de code donné, vous pouvez utiliser les vues système suivantes:

  1. sys.sql_modules
  2. sys.all_sql_modules
  3. sys.syscomments

Par exemple, en utilisant la dernière vue, vous pouvez utiliser le script suivant pour rechercher tous les objets dans les définitions dont un morceau de code donné est trouvé:

Rechercher des extraits de code dans les définitions d'objets de base de données
 select obj.[object_id], obj.[name], obj.[type_desc], sc.[text] from sys.syscomments as sc inner join sys.objects obj on sc.[id]=obj.[object_id] where sc.[text] like '%code snippet%'; 


L'identifiant, le nom, la description et la définition complète de l'objet seront affichés ici.

Recherchez avec l'utilitaire de recherche gratuit dbForge


Cependant, il est plus pratique de rechercher à l'aide de bons outils prêts à l'emploi. Un tel outil est dbForge Search .

Pour appeler cet utilitaire dans la fenêtre SSMS, cliquez sur le bouton .

La boîte de recherche suivante apparaîtra:



Faites attention au panneau supérieur (de gauche à droite):

  1. vous pouvez changer le mode de recherche (recherche DDL (objets) ou données)
  2. directement ce que nous recherchons (quelle sous-chaîne)
  3. s'il faut être sensible à la casse, rechercher la correspondance exacte des mots, rechercher les occurrences:


  4. regrouper les résultats par type d'objet - bouton
  5. sélectionnez les types d'objets à rechercher:

  6. Vous pouvez également spécifier plusieurs bases de données pour rechercher et sélectionner une instance de MS SQL Server

Tout cela en mode de recherche d'objets, c'est-à-dire lorsque DDL est activé:



En mode de recherche de données, seul le choix des types d'objets changera:



À savoir, seules les tables seront disponibles pour la sélection, où les données elles-mêmes sont stockées:



Maintenant, comme précédemment, nous trouverons toutes les occurrences de la sous-chaîne «Project» dans les noms des objets:



Comme vous pouvez le voir, le mode de recherche des objets DDL a été sélectionné, il est rempli que nous recherchons la ligne "Projet", le reste était tout par défaut.

Lorsque vous mettez en surbrillance un objet trouvé, le code de définition de cet objet ou de son objet parent entier est affiché ci-dessous.

Vous pouvez également déplacer la navigation vers l'objet trouvé en cliquant sur le bouton :



Vous pouvez également regrouper les objets trouvés par leur type:



Veuillez noter que même ces tables sont affichées dans lesquelles se trouvent des champs dont les noms contiennent la sous-chaîne «Projet». Cependant, rappelez-vous que le mode de recherche peut être modifié: pour rechercher une conformité totale / partielle / sensible à la casse ou non.

On retrouve maintenant la valeur «Ramiro» dans tous les tableaux:



Notez que toutes les lignes qui contiennent la sous-chaîne «Ramiro» de la table Employé sélectionnée sont affichées ci-dessous.

Vous pouvez également déplacer la navigation vers l'objet trouvé en appuyant sur le bouton comme précédemment :



Ainsi, nous pouvons rechercher les objets et les données nécessaires dans la base de données.

Conclusion


Les moyens de rechercher à la fois les données elles-mêmes et les objets dans la base de données ont été examinés à la fois à l'aide des outils intégrés du SGBD MS SQL Server lui-même et à l'aide de l'utilitaire gratuit de recherche dbForge .

Devart a également un certain nombre d'autres solutions prêtes à l'emploi gratuites, dont une liste complète peut être trouvée ici .

Les sources


Source: https://habr.com/ru/post/fr475212/


All Articles