¿Cómo buscar una cadena de texto en todos los objetos de una base de datos SQL Server?

Utilizando las tablas de sistema, se puede hacer una búsqueda de una cadena de texto en todos los objetos de la base de datos, ya sean procedimientos almacenados, funciones, triggers...

Para ello se puede utilizar el siguiente script:

USE <BASE_DATOS>
GO
SELECT
Object_name(so .parent_object_id) Parent_Name,
so .name [Objeto],
so .type_desc [Tipo],
so .create_date [Creado],
sm.definition [Texto]
FROM sys .objects so
INNER JOIN sys. sql_modules sm ON so.object_id = sm.object_id
WHERE
so .type = '<TIPO_OBJETO>' AND
CONVERT(VARCHAR(8000),sm.definition) LIKE '%<TEXTO_A_BUSCAR>%'

Donde:

  • <BASE_DATOS> es la base de datos sobre la que queremos hacer la búsqueda
  • <TIPO_OBJETO> es el tipo de objeto sobre el que se quiere hacer la búsqueda. Se puede comentar esa línea para que efectúe la búsqueda independientemente del tipo de objeto. En caso de especificarse, los tipos de objeto disponibles son:
    • AF: Aggregate function (CLR)
    • C: CHECK constraint
    • D: DEFAULT(constraint o stand-alone)
    • F: FOREIGN KEY constraint
    • FN: Función escalar SQL
    • FS: función escalar de ensamblado (CLR)
    • FT: función table-valued de ensamblado (CLR)
    • IF: función table-valued inline SQL
    • IT: tabla interna
    • P: procedimiento almacenado SQL
    • PC: procedimiento almacenado de ensamblado (CLR)
    • PG: Plan guide
    • PK: PRIMARY KEY constraint
    • R: Regla (estilo antiguo, stand-alone)
    • RF: Replication-filter-procedure
    • S: tabla base de sistema
    • SN: sinónimo
    • SO: Objeto de secuencia
    • SQ: cola de servicio
    • TA: Trigger DML de ensamblado (CLR)
    • TF: función table-valued SQL
    • TR: Trigger DML SQL
    • TT: Tipo de tabla
    • U: Tabla (definida por el usuario)
    • UQ: UNIQUE constraint
    • V: Vista
    • X: procedimiento almacenado extendido
    • ET: tabla externa
  • <TEXTO_A_BUSCAR> es el texto que queremos buscar
Créditos