web-dev-qa-db-fra.com

Comment trouver le nom de la procédure stockée, basée sur la recherche du nom de la table, à l'aide de SQL Server 2008?

Je veux trouver toutes les procédures stockées où une table particulière est utilisée. Il y a beaucoup de procédures stockées dans la base de données, il est donc impossible de vérifier chaque procédure. 

Existe-t-il un moyen d'utiliser une requête de recherche pour pouvoir rechercher les procédures stockées?

J'ai essayé ce code:

SELECT distinct so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '% RejectionReason %'

RejectionReason est le nom de ma table, mais toutes les procédures où RejectionReason est utilisé comme nom de colonne sont affichées.

18
SELECT o.name, o.type_desc, p.name, p.type_desc
FROM sys.sql_dependencies d
INNER JOIN sys.objects o
    ON d.object_id = o.object_id
INNER JOIN sys.objects p
    ON d.referenced_major_id = p.object_id
    AND o.name = 'RejectionReason'

ou

SELECT o.name, t.TABLE_NAME, c.text 
  FROM syscomments c 
  JOIN sysobjects o 
    ON c.id = o.id
  JOIN INFORMATION_SCHEMA.Tables t
    ON  c.text LIKE '%RejectionReason%' 

ou

EXEC sp_depends @objname = N'RejectionReason';

si aucun de ceux-ci ne vous aide à consulter ce blog: http://blog.sqlauthority.com/2010/02/04/sql-server-get-the-list-of-object-dependencies-sp_depends-and- information_schema-routines-and-sys-dm_sql_referencing_entities /

21
Carlos Quintanilla

Essayez d’utiliser l’outil gratuit de RedGate Recherche SQL .

4
Alex_L

Voici un morceau de code qui espère que cela fonctionnera. Il suffit de changer le nom de la table, cela dépend de votre code

SELECT DISTINCT so.name 
FROM syscomments sc INNER JOIN sysobjects so on sc.id=so.id 
WHERE sc.text LIKE '%tablename%'

par exemple.:

SELECT DISTINCT so.name 
FROM syscomments sc INNER JOIN sysobjects so on sc.id=so.id 
WHERE sc.text LIKE '%users%'

Vous obtiendrez la liste des procédures de magasin et les relations de table.

3
Praveen04

Conformément à MSDNsp_depends sera supprimé dans les prochaines versions si vous l'utilisez, vous pouvez utiliser le query

SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('dbo.TableName', 'OBJECT');
1
VS1

Je suis conscient de deux possibilités.

Premièrement, SQL Management Studio a une option pour afficher les dépendances. Cliquez avec le bouton droit de la souris sur la table et sélectionnez View Dependencies. Toutefois, cela ne mettra pas en évidence les utilisateurs dans lesquels le nom du fichier est incorporé dans du SQL dynamique.

La deuxième option consiste à cliquer avec le bouton droit de la souris sur la base de données et à sélectionner Generate Scripts. Suivez l’assistant et écrivez tous les fichiers USP dans une nouvelle fenêtre de requête, puis recherchez le nom de votre table. Ceci est plus laborieux, mais trouvera toutes les utilisations.

0
BonyT

J'utilise le script SQL suivant pour rechercher des noms de colonnes et dans toutes les procédures stockées de votre base de données . Vous pouvez également l'utiliser pour rechercher des tables dans des procédures stockées.

Spécifiez le terme à rechercher dans la variable@SearchFor(comme vous le feriez dans une expression LIKE, par exemple/'%LastName%'pour rechercher des colonnes et des procédures stockées contenant LastName). 

Il trouvera les noms des colonnes dans les tableaux ainsi que du texte dans les procédures stockées. Le script peut même afficher le code source SP si vous définissez @SPNameOnly sur 0.

--
-- Purpose: Search field names in all tables, views stored procedures
--

DECLARE @SearchFor nvarchar(max)='%Search_SP_Or_Table_Or_View%' -- search for this string
DECLARE @SearchSP bit = 1 -- 1=search in SPs as well
DECLARE @DisplaySPSource bit = 1 -- 1=display SP source code

-- tables
if (@SearchSP=1) begin  
  (
  select '['+c.table_Schema+'].['+c.table_Name+'].['+c.column_name+']' [schema_object], 
            t.table_type 
  from information_schema.columns c
  left join information_schema.Tables t on c.table_name=t.table_name
  where column_name like @SearchFor or t.table_name like @SearchFor 
  UNION
  select '['+routine_Schema+'].['+routine_Name+']' [schema_object], 
         'PROCEDURE' as table_type from information_schema.routines
  where routine_definition like @SearchFor or routine_name like @SearchFor 
        and routine_type='procedure'
  )
  order by table_type, schema_object
end else begin
  select '['+c.table_Schema+'].['+c.table_Name+'].['+c.column_name+']' [schema_object], 
         t.table_type 
  from information_schema.columns c
  left join information_schema.Tables t on c.table_name=t.table_name
  where column_name like @SearchFor or t.table_name like @SearchFor 
  order by c.table_Name, c.column_name
end     
-- stored procedure (source listing)
if (@SearchSP=1) begin      
    if (@DisplaySPSource=1) begin
      select '['+routine_Schema+'].['+routine_Name+']' [schema.sp], routine_definition 
      from information_schema.routines
      where routine_definition like @SearchFor  or routine_name like @SearchFor 
      and routine_type='procedure'
      order by routine_name
    end
end
0
Matt

Cela retournera les SP et les vues.

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 '%TableName%'
0
Nalan Madheswaran

Je suppose que ce script montre tous les objets dépendants de la table, y compris les SP.

USE MYDatabase
GO

DECLARE @TableName varchar(100)
SET @TableName = 'mytable'

SELECT
 SourceSchema                  = OBJECT_SCHEMA_NAME(sed.referencing_id)
 ,SourceObject                 = OBJECT_NAME(sed.referencing_id)
 ,ReferencedDB                 = ISNULL(sre.referenced_database_name, DB_NAME())
 ,ReferencedSchema             = ISNULL(sre.referenced_schema_name,
OBJECT_SCHEMA_NAME(sed.referencing_id))
 ,ReferencedObject             = sre.referenced_entity_name
 ,ReferencedColumnID   = sre.referenced_minor_id
 ,ReferencedColumn             = sre.referenced_minor_name
FROM sys.sql_expression_dependencies sed
CROSS APPLY sys.dm_sql_referenced_entities(OBJECT_SCHEMA_NAME(sed.referencing_id)
+ '.' + OBJECT_NAME(sed.referencing_id), 'OBJECT') sre
WHERE sed.referenced_entity_name = @TableName
AND sre.referenced_entity_name = @TableName

pour plus de détails, vous pouvez consulter . http://sqlserverplanet.com/sql-server-2008/find-dependent-objects/

0
Sumit

SysObjects stocke des informations de base sur tous les objets de votre base de données. Il est utile que vous le sachiez, car il nous indique le nom de chaque objet et son type.

SysComments stocke le texte réel (code) de vos procédures et fonctions stockées. Il contient un champ ID qui renvoie au champ ID dans SysObjects.

select so.name, text
from sysobjects so, syscomments sc
where so.id = sc.id
and text like '%RejectionReason%'
0
Karthi Rathinavelu