Busque datos y objetos en la base de datos de MS SQL Server con la utilidad gratuita dbForge Search

Descripción de la necesidad general de encontrar datos y objetos en una base de datos.


La búsqueda de datos, así como los procedimientos almacenados, tablas y otros objetos en la base de datos es un tema bastante relevante, incluso para los desarrolladores de C #, así como para el desarrollo de .NET en general.

Muy a menudo, puede surgir una situación en la que necesite encontrar:

  1. objeto de base de datos (tabla, vista, procedimiento almacenado, función, etc.)
  2. datos (valor y en qué tabla se encuentra)
  3. fragmento de código en definiciones de objeto de base de datos

Hay muchas soluciones preparadas, tanto de pago como gratuitas.

Primero, veremos cómo puede buscar datos y objetos en una base de datos usando las herramientas DBMS incorporadas, y luego veremos cómo hacerlo usando la utilidad gratuita dbForge Search .

Buscar usando las herramientas DBMS incorporadas


Puede determinar si la tabla de empleados está en la base de datos utilizando el siguiente script:

Buscar tabla por nombre
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'; 


El resultado podría ser algo como esto:



Aquí se muestran:

  1. identificadores del objeto y el esquema donde se encuentra el objeto
  2. el nombre de este circuito y el nombre de este objeto
  3. tipo de objeto y descripción de este tipo de objeto
  4. fecha y hora de creación y última modificación del objeto

Para encontrar todas las apariciones de la línea "Proyecto", puede usar el siguiente script:

Buscar todos los objetos por subcadena en un nombre
 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%'; 


El resultado podría ser algo como esto:



Como puede ver en el resultado, aquí la subcadena "Proyecto" contiene no solo dos tablas Project y ProjectSkill, sino también algunas claves primarias y externas.

Para comprender a quién pertenecen exactamente estas claves, agregamos a la salida el campo parent_object_id y su nombre y el esquema en el que se ubica de la siguiente manera:

Busque todos los objetos por subcadena en el nombre con la salida de los objetos principales
 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%'; 


El resultado será una tabla con información detallada sobre los objetos principales, es decir, donde se definen las claves primarias y externas:



Los siguientes objetos del sistema se utilizan en consultas:


Entonces, descubrimos cómo encontrar objetos en la base de datos utilizando las herramientas DBMS incorporadas.
Ahora mostramos cómo encontrar datos en la base de datos usando el ejemplo de búsqueda de cadenas.

Para encontrar el valor de cadena para todas las tablas de la base de datos, puede usar la siguiente solución . Simplificamos esta solución y mostramos cómo puede encontrar, por ejemplo, el valor de "Ramiro" utilizando el siguiente script:

Busque valores de cadena por subcadena en todas las tablas de la base de datos
 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 


El resultado de la ejecución puede ser así:



Los nombres de las tablas se muestran aquí y en qué columnas se almacena el valor que contiene la subcadena "Ramiro". Además del número de entradas de esta subcadena encontradas para el par tabla-columna encontrado.

Para buscar objetos en las definiciones de las cuales hay un código dado, puede usar las siguientes vistas del sistema:

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

Por ejemplo, usando la última vista, puede usar la siguiente secuencia de comandos para buscar todos los objetos en las definiciones de las cuales se encuentra un fragmento de código dado:

Buscar fragmentos de código en definiciones de objeto de base de datos
 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%'; 


El identificador, el nombre, la descripción y la definición completa del objeto se mostrarán aquí.

Busque con la herramienta de búsqueda gratuita dbForge


Sin embargo, es más conveniente buscar utilizando buenas herramientas listas para usar. Una de esas herramientas es dbForge Search .

Para llamar a esta utilidad en la ventana SSMS, haga clic en el botón .

Aparecerá el siguiente cuadro de búsqueda:



Presta atención al panel superior (de izquierda a derecha):

  1. puede cambiar el modo de búsqueda (buscando DDL (objetos) o datos)
  2. directamente lo que estamos buscando (qué subcadena)
  3. si se distingue entre mayúsculas y minúsculas, busca la coincidencia exacta de palabras, busca ocurrencias:


  4. resultado del grupo por tipo de objeto - botón
  5. seleccione los tipos de objetos necesarios para buscar:

  6. También puede especificar varias bases de datos para buscar y seleccionar una instancia de MS SQL Server

Todo esto está en modo de búsqueda de objetos, es decir, cuando DDL está habilitado:



En el modo de búsqueda de datos, solo cambiará la elección de los tipos de objeto:



A saber, solo las tablas estarán disponibles para la selección, donde se almacenan los datos en sí:



Ahora, como antes, encontraremos todas las apariciones de la subcadena "Proyecto" en los nombres de los objetos:



Como puede ver, se seleccionó el modo de búsqueda para objetos DDL, se completó que estamos buscando la línea "Proyecto", el resto fue todo por defecto.

Al resaltar un objeto encontrado, el código de definición de este objeto o su objeto padre completo se muestra a continuación.

También puede mover la navegación al objeto encontrado haciendo clic en el botón :



También puede agrupar objetos encontrados por su tipo:



Tenga en cuenta que incluso esas tablas se muestran en las que hay campos cuyos nombres contienen la subcadena "Proyecto". Sin embargo, recuerde que el modo de búsqueda se puede cambiar: para buscar cumplimiento total / parcial / sensible a mayúsculas o minúsculas o no.

Ahora encontramos el valor "Ramiro" en todas las tablas:



Observe que todas las filas que contienen la subcadena "Ramiro" de la tabla de empleados seleccionada se muestran a continuación.

También puede mover la navegación al objeto encontrado presionando el botón como antes :



Por lo tanto, podemos buscar los objetos y datos necesarios en la base de datos.

Conclusión


Las formas de buscar tanto los datos en sí como los objetos en la base de datos se examinaron utilizando las herramientas integradas del MS SQL Server DBMS y utilizando la utilidad gratuita dbForge Search .

Devart también tiene una serie de otras soluciones gratuitas listas para usar, una lista completa de las cuales se puede encontrar aquí .

Fuentes


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


All Articles