Identificar texto dentro de las tablas de base de datos - MSSQLSERVER

A muchos les puede haber pasado que necesitan encontrar un dato específico y no saben en que tabla o tablas de la base de datos se encuentra. Pues bueno, aquí coloco este script para que lo prueben.

Lo primero que deben hacer es colocar el texto que deseen buscar y luego ejecutar el script, esto debe arrojar como resultado el nombre de la columna(esquema.nombreTabla.nombreColumna) y el valor del contenido total del campo donde se ubica el texto buscado.
  1. BEGIN  
  2. DECLARE @Results TABLE   
  3. (  
  4. ColumnName NVARCHAR(370),   
  5. ColumnValue NVARCHAR(3630)  
  6. )  
  7. SET NOCOUNT ON  
  8.   
  9. DECLARE @TableName NVARCHAR(256),  
  10. @ColumnName NVARCHAR(128),  
  11. @SearchStr2 NVARCHAR(110)  
  12.   
  13. SET @TableName = ''  
  14. SET @SearchStr2 = 'TEXTO A BUSCAR' ----->>> AQUI ingresar el texto que se desea buscar  
  15. SET @SearchStr2 = QUOTENAME('%' + @SearchStr2 + '%''''')  
  16. WHILE @TableName IS NOT NULL  
  17. BEGIN  
  18. SET @ColumnName = ''  
  19. SET @TableName = (  
  20. SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))  
  21. FROM INFORMATION_SCHEMA.TABLES  
  22. WHERE TABLE_TYPE = 'BASE TABLE'  
  23. AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)  
  24. > @TableName  
  25. AND OBJECTPROPERTY(  
  26. OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)),  
  27. 'IsMSShipped'  
  28. ) = 0  
  29. )  
  30.   
  31. WHILE (@TableName IS NOT NULL)  
  32. AND (@ColumnName IS NOT NULL)  
  33. BEGIN  
  34. SET @ColumnName = (  
  35. SELECT MIN(QUOTENAME(COLUMN_NAME))  
  36. FROM INFORMATION_SCHEMA.COLUMNS  
  37. WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)  
  38. AND TABLE_NAME = PARSENAME(@TableName, 1)  
  39. AND DATA_TYPE IN ('char''varchar''nchar''nvarchar')  
  40. AND QUOTENAME(COLUMN_NAME) > @ColumnName  
  41. )  
  42.   
  43. IF @ColumnName IS NOT NULL  
  44. BEGIN  
  45. INSERT INTO @Results  
  46. EXEC (  
  47. 'SELECT ''' + @TableName + '.' + @ColumnName +  
  48. ''', LEFT('  
  49. + @ColumnName + ', 3630) FROM ' + @TableName +  
  50. ' (NOLOCK) '  
  51. ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2  
  52. )  
  53. END  
  54. END  
  55. END  
  56.   
  57. SELECT DISTINCT ColumnName,  
  58. ColumnValue FROM @Results  
  59. END  
Resultado: Por ejemplo, si se hubiera ingresado como texto 'Beverages'

1 comentarios:

Emerson dijo...

A mira no sabia, interesante

Publicar un comentario