Pregunta Texto de búsqueda en procedimiento almacenado en SQL Server


Quiero buscar un texto de toda mi base de datos stored procedures. Yo uso el siguiente SQL:

SELECT DISTINCT
       o.name AS Object_Name,
       o.type_desc
  FROM sys.sql_modules m
       INNER JOIN
       sys.objects o
         ON m.object_id = o.object_id
 WHERE m.definition Like '%[ABD]%';

Quiero buscar [ABD] en todo stored procedures incluyendo corchetes, pero no está dando el resultado correcto. ¿Cómo puedo cambiar mi consulta para lograr esto?


590
2018-02-05 09:30


origen


Respuestas:


Escape de los corchetes:

...
WHERE m.definition Like '%\[ABD\]%' ESCAPE '\'

Entonces, los corchetes se tratarán como una cadena de literales, no como comodines.


452
2018-02-05 09:33



Pruebe esta solicitud:

Consulta

SELECT name
FROM   sys.procedures
WHERE  Object_definition(object_id) LIKE '%strHell%'

239
2017-08-21 14:39



¿Has intentado utilizar algunas de las herramientas de terceros para hacer la búsqueda? Hay varios disponibles que son gratuitos y eso me ahorró un montón de tiempo en el pasado.

A continuación hay dos Complementos de SSMS que utilicé con buen éxito.

Búsqueda ApexSQL - Busca tanto el esquema como los datos en las bases de datos y tiene características adicionales como el seguimiento de la dependencia y más ...

Paquete de herramientas SSMS - Tiene la misma funcionalidad de búsqueda que la anterior y varias otras funciones geniales. No es gratis para SQL Server 2012 pero sigue siendo muy asequible.

Sé que esta respuesta no está 100% relacionada con las preguntas (que fue más específica) pero espero que a otros les resulte útil.


51
2017-09-05 10:55



Normalmente ejecuto lo siguiente para lograr eso:

select distinct object_name(id) 
from syscomments 
where text like '%[ABD]%'
order by object_name(id) 

28
2018-02-05 09:33



Búsqueda SQL de Redgate es una gran herramienta para hacer esto, es un complemento gratuito para SSMS.


19
2017-11-03 07:56



Buenas prácticas para trabajar con SQL Server.

Realice el procedimiento a continuación de la tienda y configure una tecla corta para esa imagen inferior,

CREATE PROCEDURE [dbo].[Searchinall]       
(@strFind AS VARCHAR(MAX))
AS
BEGIN
    SET NOCOUNT ON; 
    --TO FIND STRING IN ALL PROCEDURES        
    BEGIN
        SELECT OBJECT_NAME(OBJECT_ID) SP_Name
              ,OBJECT_DEFINITION(OBJECT_ID) SP_Definition
        FROM   sys.procedures
        WHERE  OBJECT_DEFINITION(OBJECT_ID) LIKE '%'+@strFind+'%'
    END 

    --TO FIND STRING IN ALL VIEWS        
    BEGIN
        SELECT OBJECT_NAME(OBJECT_ID) View_Name
              ,OBJECT_DEFINITION(OBJECT_ID) View_Definition
        FROM   sys.views
        WHERE  OBJECT_DEFINITION(OBJECT_ID) LIKE '%'+@strFind+'%'
    END 

    --TO FIND STRING IN ALL FUNCTION        
    BEGIN
        SELECT ROUTINE_NAME           Function_Name
              ,ROUTINE_DEFINITION     Function_definition
        FROM   INFORMATION_SCHEMA.ROUTINES
        WHERE  ROUTINE_DEFINITION LIKE '%'+@strFind+'%'
               AND ROUTINE_TYPE = 'FUNCTION'
        ORDER BY
               ROUTINE_NAME
    END

    --TO FIND STRING IN ALL TABLES OF DATABASE.    
    BEGIN
        SELECT t.name      AS Table_Name
              ,c.name      AS COLUMN_NAME
        FROM   sys.tables  AS t
               INNER JOIN sys.columns c
                    ON  t.OBJECT_ID = c.OBJECT_ID
        WHERE  c.name LIKE '%'+@strFind+'%'
        ORDER BY
               Table_Name
    END
END

Ahora - Establezca la tecla breve como se indica a continuación,

enter image description here

Así que la próxima vez que quiera encontrar un texto en particular en cualquiera de los cuatro objetos como Store procedure, Views, Functions y Tables. Solo necesita escribir esa palabra clave y presionar la tecla breve.

Por ejemplo: Quiero buscar 'PaymentTable' y luego escribir 'PaymentTable' en el editor de consultas y presionar la tecla breve ctrl+4 - le proporcionará un resultado completo.


18
2017-11-10 13:23



También puedes usar este:

SELECT * 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION like '%Search_String%'

11
2017-10-04 12:28



Por favor toma esto como una alternativa "sucia" pero esto me salvó muchas veces, especialmente cuando no estaba familiarizado con el proyecto DB. A veces intenta buscar una cadena dentro de todos los SP y olvida que parte de la lógica relacionada puede haber sido escondiendo entre Funciones y Disparadores o puede ser simplemente redactado de forma diferente a lo que pensaba.

Desde su MSSMS, puede hacer clic derecho en su base de datos y seleccionar Tasks -> Generate Scripts asistente para mostrar todos los SP, FNS y Triggers en un único archivo .sql.

enter image description here

¡Asegúrate de seleccionar Triggers también!

enter image description here

Entonces solo usa Sublime o Notepad para buscar la cadena que necesitas encontrar. Sé que esto puede ser un enfoque bastante ineficiente y paranoico, pero funciona :)


9
2018-01-24 19:36



select top 10 * from
sys.procedures
where object_definition(object_id) like '%\[ABD\]%'

5
2018-05-22 07:42



¡Puede ser que te ayude!

SELECT DISTINCT 
      A.NAME AS OBJECT_NAME,
      A.TYPE_DESC
      FROM SYS.SQL_MODULES M 
      INNER JOIN SYS.OBJECTS A ON M.OBJECT_ID = A.OBJECT_ID
      WHERE M.DEFINITION LIKE '%['+@SEARCH_TEXT+']%'
      ORDER BY TYPE_DESC

5
2018-06-11 06:30