2010-01-10 2 views
2

Existe-t-il un moyen de rechercher dans l'ensemble des (procédures stockées, fonctions, vues) l'utilisation d'une constante?Comment trouver l'utilisation de la base de données du serveur SQL constant

J'ai un problème lorsque j'ai une base de données SQL Server. Il a quelques procédures stockées et fonctions déclarées. Je cherche l'utilisation de "115", qui se trouve être un code de paie. Je n'ai pas écrit tout le code à l'origine, donc je cherche n'importe où une constante est déclarée, ou la chaîne "115" est utilisée littéralement.

Répondre

7
SELECT * FROM sys.objects WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%115%' 

Cela inclut des contraintes etc trop qui sont omis dans sys.sql_modules et sys.procedures

0

SQL Server 2000:

USE AdventureWorks 
GO 
--Option 1 
SELECT DISTINCT so.name 
FROM syscomments sc 
INNER JOIN sysobjects so ON sc.id=so.id 
WHERE sc.TEXT LIKE '%Employee%' 
GO 
--Option 2 
SELECT DISTINCT o.name ,o.xtype 
FROM syscomments c 
INNER JOIN sysobjects o ON c.id=o.id 
WHERE c.TEXT LIKE '%Employee%' 
GO 

SQL Server 2005:

USE AdventureWorks 
GO 
--Searching for Empoloyee table 
SELECT Name 
FROM sys.procedures 
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Employee%' 
GO 
--Searching for Empoloyee table and RateChangeDate column together 
SELECT Name 
FROM sys.procedures 
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Employee%' 
AND OBJECT_DEFINITION(OBJECT_ID) LIKE '%RateChangeDate%' 
GO 

Les deux exemples tirés de:

http://blog.sqlauthority.com/2007/11/10/sql-server-2005-2000-search-string-in-stored-procedure/

De même:

http://www.knowdotnet.com/articles/storedprocfinds.html

avec cet exemple:

CREATE PROCEDURE Find_Text_In_SP 
@StringToSearch varchar(100) 
AS 
    SET @StringToSearch = '%' [email protected] + '%' 
    SELECT Distinct SO.Name 
    FROM sysobjects SO (NOLOCK) 
    INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID 
    AND SO.Type = 'P' 
    AND SC.Text LIKE @stringtosearch 
    ORDER BY SO.Name 
GO 
+0

syscomments est peu fiable: si votre chaîne de recherche commence comme la position 3999, il ne trouvera pas parce que la colonne de texte est nvarchar (4000). – gbn

+0

bon point - j'avais oublié ça! – davek

4

Vous pouvez effectuer une recherche sys.sql_modules pour definition LIKE N'%115%':

SELECT sm.object_id, OBJECT_NAME(sm.object_id) AS object_name 
    , o.type, o.type_desc 
FROM sys.sql_modules AS sm 
JOIN sys.objects AS o ON sm.object_id = o.object_id 
WHERE sm.definition LIKE N'%115%' 
ORDER BY o.type; 

Vous pouvez obtenir un tas de faux positifs, mais au moins vous avez un point de départ.

+0

+1 plus lisse que ma réponse. Cela fonctionne-t-il également dans SQL Server 2000? – davek

Questions connexes