wake-up-neo.net

Wie finden Sie den Namen der gespeicherten Prozedur basierend auf der Tabellennamensuche mit SQL Server 2008?

Ich möchte alle gespeicherten Prozeduren finden, in denen eine bestimmte Tabelle verwendet wird. Es gibt viele gespeicherte Prozeduren in der Datenbank, daher ist es nicht möglich, die einzelnen Prozeduren zu überprüfen. 

Gibt es eine Möglichkeit, eine Suchabfrage zu verwenden, um die gespeicherten Prozeduren zu finden?

Ich habe diesen Code ausprobiert:

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

Wobei RejectionReason mein Tabellenname ist, aber es zeigt alle Prozeduren, bei denen RejectionReason als Spaltenname verwendet wird, so dass dies nicht funktioniert.

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'

oder

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%' 

oder

EXEC sp_depends @objname = N'RejectionReason';

wenn keiner von ihnen Ihnen hilft, diesen Blog zu lesen: 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

Verwenden Sie das kostenlose Tool RedGate SQL Search .

4
Alex_L

Hier ist ein Stück Code, ich hoffe es wird funktionieren. Ändert einfach den Tabellennamen, es hängt von Ihrem Code ab

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

z.B.:

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

Sie erhalten die Liste der Geschäftsvorgänge und die Tabellenbeziehungen.

3
Praveen04

Da per MSDNsp_depends in zukünftigen Versionen entfernt wird, falls Sie dies verwenden, können Sie stattdessen die folgenden query verwenden:

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

Ich kenne zwei Möglichkeiten.

Erstens hat SQL Management Studio eine Option zum Anzeigen von Abhängigkeiten. Klicken Sie mit der rechten Maustaste auf die Tabelle, und wählen Sie View Dependencies aus. Dies wird jedoch nicht hervorgehoben, wenn der Tabellenname in dynamisches SQL eingebettet ist.

Die zweite Möglichkeit besteht darin, mit der rechten Maustaste auf die Datenbank zu klicken und Generate Scripts auszuwählen. Folgen Sie dem Assistenten und dem Skript mit allen Usps zu einem neuen Abfragefenster. Suchen Sie dann nach dem Namen Ihrer Tabelle. Dies ist mühsamer, wird aber alle Verwendungen finden.

0
BonyT

Ich verwende das folgende SQL-Skript, um nach Spaltennamen zu suchen und Text in allen gespeicherten Prozeduren Ihrer Datenbank . Sie können damit auch Tabellen in gespeicherten Prozeduren suchen.

Geben Sie den Suchbegriff in Variable@SearchForan (wie Sie ihn in einem LIKE-Ausdruck verwenden würden, z. B.'%LastName%', um Spalten und gespeicherte Prozeduren zu finden, die LastName enthalten). 

Es findet Spaltennamen in Tabellen sowie Text in gespeicherten Prozeduren. Das Skript kann sogar den Quellcode SP anzeigen, wenn Sie @SPNameOnly auf 0 setzen.

--
-- 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

Dies wird SP's und Views zurückgeben.

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

Ich denke, dieses Skript zeigt alle abhängigen Objekte der Tabelle, einschließlich der SPs.

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

weitere Informationen finden Sie unter . http://sqlserverplanet.com/sql-server-2008/find-dependent-objects/

0
Sumit

SysObjects speichert grundlegende Informationen zu allen Objekten in Ihrer Datenbank. Es ist nützlich für Sie zu wissen, da uns der Name jedes Objekts und der Typ des Objekts angezeigt wird.

SysComments speichert den tatsächlichen Text (Code) für Ihre gespeicherten Prozeduren und Funktionen. Es enthält ein ID-Feld, das dem ID-Feld in SysObjects zugeordnet wird.

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