2010-07-15 4 views
1

Je suis un nouveau développeur qui essaie d'ajouter de nouvelles fonctionnalités à un ancien projet. Le nouveau code que j'essaie de mettre en œuvre implique des tables de base de données, donc je suis à la recherche de la procédure appelée pour mettre à jour ou remplir la table à l'origine.Un moyen facile de rechercher des procédures SQL?

Mais il y a plus de 50 procédures.

court d'ouvrir chaque procédure manuellement et en utilisant CTRL + F pour rechercher le terme que je suis à la recherche, est-il un moyen plus facile de balayer les procédures stockées pour un terme de recherche?

Répondre

3

Si vous utilisez SQL Server Management Studio, vous pouvez cliquer droit sur la table et sélectionnez « Afficher les dépendances » (My Management Studio est en allemand ... Je ne sais pas si elle est exactement appelé « Afficher dépendances "en anglais).

Un écran apparaîtra où vous pourrez voir tous les objets dépendants de cette table.
Si les procédures stockées sont répertoriées, cela signifie qu'elles utilisent cette table.

+0

Appelé "Afficher les dépendances". Vielen Dank! Acceptera votre réponse dans 8 minutes. –

1

Vous pouvez utiliser la vue sys.syscomments pour lire le texte.

SELECT Distinct SO.Name, sc.text, so.type 
FROM sysobjects SO (NOLOCK) 
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID 
AND SC.Text LIKE '%your_string%' 
ORDER BY SO.Name 
1

Essayez ceci:

SELECT OBJECT_NAME(id) 
    FROM syscomments 
    WHERE [text] LIKE '%foobar%' 
    AND OBJECTPROPERTY(id, 'IsProcedure') = 1 
    GROUP BY OBJECT_NAME(id) 

Cette recherche uniquement pour les procédures stockées, que les autres méthodes affichées ne semblent pas faire.

Selon syscomments MSDN ...

contient des entrées pour chaque point de vue, la règle, par défaut , déclenchement, contrainte CHECK, contrainte DEFAULT et procédure stockée au sein de la base de données.

Donc, si vous ne voulez pas spécifier que vous ne la recherche que vous aurez stockées procs obtenir beaucoup d'autres choses que vous n'êtes pas intéressé par.

1
create procedure [dbo].[uspUtilitySearchText] 
(
    @txt varchar(2048) 
) 
AS 
SET NOCOUNT ON 

declare @srch varchar(3000) 

set @srch = '%' + @txt + '%' 

SELECT 
    o.type_desc AS ROUTINE_TYPE, 
    o.[name] AS ROUTINE_NAME, 
    m.definition AS ROUTINE_DEFINITION 
FROM sys.sql_modules AS m 
    INNER JOIN sys.objects AS o 
     ON m.object_id = o.object_id 
WHERE m.definition LIKE @srch 

puis

exec uspUtilitySearchText 'tablename' 

cette recherche tous les objets de base de données pour le texte donné

1
Select * from syscomments where [text] like '%table_name%' 

Ou utilisez un programme qui peut scripter tous les objets Non-Donnée d'une base de données, puis Grep Them.

Questions connexes