Question Rechercher du texte dans une procédure stockée dans SQL Server


Je veux rechercher un texte de toute ma base de données stored procedures. J'utilise le ci-dessous 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]%';

Je veux rechercher [ABD] dans tout stored procedures entre crochets, mais cela ne donne pas le bon résultat. Comment puis-je modifier ma requête pour y parvenir?


590
2018-02-05 09:30


origine


Réponses:


Échapper les crochets:

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

Ensuite, les crochets seront traités comme des chaînes littérales et non comme des caractères génériques.


452
2018-02-05 09:33



Essayez cette demande:

Question

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

239
2017-08-21 14:39



Avez-vous essayé d'utiliser certains des outils tiers pour faire la recherche? Il y en a plusieurs disponibles gratuitement et cela m'a fait économiser beaucoup de temps dans le passé.

Voici deux Addins SSMS que j'ai utilisés avec succès.

ApexSQL Search - Recherche à la fois le schéma et les données dans les bases de données et dispose de fonctionnalités supplémentaires telles que le suivi des dépendances et plus encore ...

Pack d'outils SSMS - A la même fonctionnalité de recherche que la précédente et plusieurs autres fonctionnalités intéressantes. Pas gratuit pour SQL Server 2012 mais toujours très abordable.

Je sais que cette réponse n'est pas 100% liée aux questions (ce qui était plus spécifique) mais j'espère que d'autres trouveront cela utile.


51
2017-09-05 10:55



Je cours habituellement ce qui suit pour accomplir ceci:

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

28
2018-02-05 09:33



Recherche SQL de Redgate est un excellent outil pour faire cela, c'est un plugin gratuit pour SSMS.


19
2017-11-03 07:56



Bonne pratique pour travailler avec SQL Server.

Faire ci-dessous la procédure de magasin et placer la clé courte pour cela comme l'image de fond,

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

Maintenant - Réglez la touche courte comme ci-dessous,

enter image description here

Alors la prochaine fois que vous voulez trouver un texte particulier dans l'un des quatre objets comme Store procedure, Views, Functions et Tables. Vous avez juste besoin d'écrire ce mot-clé et appuyez sur la touche courte.

Par exemple: Je veux rechercher 'PaymentTable' puis écrire 'PaymentTable' dans l'éditeur de requête et appuyer sur la touche courte ctrl+4 - Il vous fournira le résultat complet.


18
2017-11-10 13:23



Vous pouvez aussi utiliser celui-ci:

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

11
2017-10-04 12:28



S'il vous plaît prenez cela comme une alternative "sale" mais cela m'a sauvé beaucoup de temps surtout quand je ne connaissais pas le projet DB. Parfois, vous essayez de rechercher une chaîne dans tous les SP et oubliez qu'une partie de la logique peut avoir été se cacher entre les fonctions et les déclencheurs ou il peut être simplement formulé différemment que vous pensiez.

À partir de votre MSSMS, vous pouvez faire un clic droit sur votre base de données et sélectionner Tasks -> Generate Scripts wizard pour afficher tous les SP, Fns et Triggers dans un seul fichier .sql.

enter image description here

Assurez-vous de sélectionner les déclencheurs aussi!

enter image description here

Ensuite, utilisez simplement Sublime ou Notepad pour rechercher la chaîne que vous devez trouver. Je sais que cela peut être très inefficace et approche paranoïaque mais ça marche :)


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