Pesquise dados e objetos no banco de dados MS SQL Server usando o utilitário dbForge Search gratuito

Descrição da necessidade geral de localizar dados e objetos em um banco de dados


A pesquisa de dados, procedimentos armazenados, tabelas e outros objetos no banco de dados é um problema bastante relevante, inclusive para desenvolvedores de C #, bem como para o desenvolvimento do .NET em geral.

Muitas vezes, pode surgir uma situação na qual você precisa encontrar:

  1. objeto de banco de dados (tabela, exibição, procedimento armazenado, função etc.)
  2. data (valor e em que tabela está localizada)
  3. snippet de código nas definições de objeto de banco de dados

Existem muitas soluções prontas, pagas e gratuitas.

Primeiro, veremos como você pode procurar dados e objetos em um banco de dados usando as ferramentas internas do DBMS e, em seguida, veremos como fazer isso usando o utilitário dbForge Search gratuito.

Pesquise usando as ferramentas DBMS internas


Você pode determinar se a tabela Employee está no banco de dados usando o seguinte script:

Pesquisar tabela por nome
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'; 


O resultado pode ser algo como isto:



Aqui são exibidos:

  1. identificadores do objeto e o esquema em que o objeto está localizado
  2. o nome deste circuito e o nome deste objeto
  3. tipo de objeto e descrição desse tipo de objeto
  4. data e hora da criação e última modificação do objeto

Para encontrar todas as ocorrências da linha "Projeto", você pode usar o seguinte script:

Pesquise todos os objetos por substring em um nome
 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%'; 


O resultado pode ser algo como isto:



Como você pode ver no resultado, aqui a substring "Project" contém não apenas duas tabelas Project e ProjectSkill, mas também algumas chaves primárias e estrangeiras.

Para entender a quem exatamente essas chaves pertencem, adicionamos à saída o campo parent_object_id e seu nome e o esquema no qual ela está localizada da seguinte maneira:

Pesquise todos os objetos por substring no nome com a saída dos objetos pai
 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%'; 


O resultado será uma tabela com informações detalhadas sobre os objetos pai, ou seja, onde chaves primárias e estrangeiras são definidas:



Os seguintes objetos do sistema são usados ​​nas consultas:


Então, descobrimos como encontrar objetos no banco de dados usando as ferramentas internas do DBMS.
Agora, mostramos como encontrar dados no banco de dados usando o exemplo de pesquisa de string.

Para encontrar o valor da sequência para todas as tabelas do banco de dados, você pode usar a seguinte solução . Simplificamos esta solução e mostramos como você pode encontrar, por exemplo, o valor de “Ramiro” usando o seguinte script:

Procure valores de sequência por substring em todas as tabelas do banco de dados
 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 


O resultado da execução pode ser assim:



Os nomes das tabelas são exibidos aqui e em quais colunas o valor que contém a subcadeia “Ramiro” é armazenado. Bem como o número de entradas dessa substring encontrado para o par de tabela-coluna encontrado.

Para localizar objetos nas definições das quais existe um determinado pedaço de código, você pode usar as seguintes visualizações do sistema:

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

Por exemplo, usando a última visualização, você pode usar o seguinte script para encontrar todos os objetos nas definições em que um determinado pedaço de código é encontrado:

Procure trechos de código nas definições de objeto de banco de dados
 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%'; 


O identificador, nome, descrição e definição completa do objeto serão exibidos aqui.

Pesquise com o dbForge Search Utility gratuito


No entanto, é mais conveniente pesquisar usando boas ferramentas prontas. Uma dessas ferramentas é o dbForge Search .

Para chamar esse utilitário na janela SSMS, clique no botão .

A seguinte caixa de pesquisa será exibida:



Preste atenção ao painel superior (da esquerda para a direita):

  1. você pode alternar o modo de pesquisa (procurando DDL (objetos) ou dados)
  2. diretamente o que estamos procurando (qual substring)
  3. se diferencia maiúsculas de minúsculas, procure a correspondência exata de palavras, procure as ocorrências:


  4. agrupar o resultado por tipo de objeto - botão
  5. selecione os tipos necessários de objetos para pesquisar:

  6. Você também pode especificar vários bancos de dados para pesquisar e selecionar uma instância do MS SQL Server

Isso tudo está no modo de pesquisa de objetos, ou seja, quando o DDL está ativado:



No modo de pesquisa de dados, apenas a escolha dos tipos de objetos será alterada:



Nomeadamente, apenas tabelas estarão disponíveis para seleção, onde os próprios dados são armazenados:



Agora, como antes, encontraremos todas as ocorrências da subcadeia "Projeto" nos nomes dos objetos:



Como você pode ver, o modo de pesquisa de objetos DDL foi selecionado, é preenchido que estamos procurando a linha "Projeto", o resto era tudo por padrão.

Ao destacar um objeto encontrado, o código de definição desse objeto ou de todo o objeto pai é exibido abaixo.

Você também pode mover a navegação para o objeto encontrado clicando no botão :



Você também pode agrupar objetos encontrados por seu tipo:



Observe que mesmo essas tabelas são exibidas nos quais existem campos cujos nomes contêm a subcadeia "Projeto". No entanto, lembre-se de que o modo de pesquisa pode ser alterado: para buscar conformidade total / parcial / sensível a maiúsculas ou não.

Agora encontramos o valor "Ramiro" em todas as tabelas:



Observe que todas as linhas que contêm a subcadeia “Ramiro” da tabela Employee selecionada são exibidas abaixo.

Você também pode mover a navegação para o objeto encontrado pressionando o botão como antes :



Assim, podemos procurar os objetos e dados necessários no banco de dados.

Conclusão


As formas de pesquisar os dados em si e os objetos no banco de dados foram examinadas usando as ferramentas internas do próprio DBMS do MS SQL Server e usando o utilitário dbForge Search gratuito.

O Devart também possui várias outras soluções prontas gratuitas, cuja lista completa pode ser encontrada aqui .

Fontes


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


All Articles