2017-12-12 2 views
0

Ich habe eine Menge von gespeicherten Prozeduren, die grundlegende Logik haben, wie:, die eine Lese, Update durchführen, löschen Sie in der Datenbank

if x == 'something' return 10 else return 40; 

Diese gespeicherten Prozeduren treffen keine Datenbanktabellen.

Wie kann ich herausfinden, welche gespeicherten Prozeduren die Datenbank betreffen?

Beachten Sie, dass ich in einigen gespeicherten Prozeduren andere gespeicherte Prozeduren haben, die die Datenbank und nicht selbst per se treffen.

Antwort

1

Wollen Sie wissen möchten, welche gespeicherten Prozeduren Referenzdatenobjekt Datenbank hatte? Welches ist das folgende Skript für Sie

SELECT m.object_id,o.name,c.*,o.type,o.type_desc FROM sys.all_sql_modules AS m 
    INNER JOIN sys.objects AS o ON o.object_id=m.object_id 
    OUTER APPLY(

     SELECT 
      coalesce(object_schema_name(Referencing_ID)+'.','')+ --likely schema name 
      object_name(Referencing_ID)+ --definite entity name 
      coalesce('.'+col_name(referencing_ID,referencing_minor_id),'') 
       AS [referencing], 
      coalesce(Referenced_server_name+'.','')+ --possible server name if cross-server 
       coalesce(referenced_database_name+'.','')+ --possible database name if cross-database 
       coalesce(referenced_schema_name+'.','')+ --likely schema name 
       coalesce(referenced_entity_name,'') + --very likely entity name 
       coalesce('.'+col_name(referenced_ID,referenced_minor_id),'')AS [referenced] 
     FROM sys.sql_expression_dependencies 
     WHERE referencing_id =m.object_id 

    ) AS c 
    WHERE o.type='P' 
    AND c.referencing IS NULL 
+0

Hallo Nolan, große SQL-Abfrage hilfreich ist! Zu beachten ist, dass SPs, die zuletzt Datenbankobjekte referenzieren, WHERE cluase condition "c.referencing IS NOT NULL" sind. – Eralper

Verwandte Themen