sql >> Databáze >  >> RDS >> Sqlserver

T-SQL:Zobrazuje cyklicky uložené procedury související s tabulkami

To používá informační schéma pro tabulky i uložené procedury. Chcete-li přidat funkce, můžete změnit nebo odstranit podmínku ROUTINE_TYPE a můžete změnit typ tabulky, abyste vrátili zobrazení.

Tato odpověď poskytuje své výsledky kontrolou, na kterých tabulkách závisí uložená procedura. Myslím, že to bude mnohem přesnější výsledek než kontrola, zda je název v textu dotazu. Pokud postup odkazuje na tabulku v sekci komentářů, pak tento výsledek nebude vrácen v prvním dotazu, ale bude ve druhém a dalších zadaných odpovědích.

SELECT t.TABLE_NAME, s.ROUTINE_NAME
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.ROUTINES s ON
    s.ROUTINE_NAME IN (SELECT referencing_entity_name 
        FROM sys.dm_sql_referencing_entities(TABLE_SCHEMA + '.' + TABLE_NAME, 'OBJECT'))
    AND s.ROUTINE_TYPE = 'PROCEDURE'
WHERE t.TABLE_TYPE = 'BASE TABLE'

upravit :Zde je návod, jak získat závislosti bez funkce. (Tuto metodu mám nejraději)

SELECT DISTINCT t.name [TableName], p.name [ProcedureName]
FROM sys.objects t 
LEFT JOIN sys.sql_dependencies d ON
    d.referenced_major_id = t.object_id
LEFT JOIN sys.objects p ON
    p.object_id = d.object_id
    AND p.type = 'p'
WHERE t.type = 'u'

Pokud je vaším konkrétním účelem pouze najít jakýkoli řetězec, který odpovídá názvu tabulky, bude fungovat níže:

SELECT t.TABLE_NAME, s.ROUTINE_NAME 
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.ROUTINES s 
    ON CHARINDEX(t.TABLE_NAME, s.ROUTINE_DEFINITION) > 0
    AND s.ROUTINE_TYPE = 'PROCEDURE'
WHERE t.TABLE_TYPE = 'BASE TABLE'


  1. Kalendářní tabulka pro datový sklad

  2. Vraťte záznamy odlišné v jednom sloupci, ale seřaďte je podle jiného sloupce

  3. Sada problémů 2 – Identifikace entit a atributů

  4. Mohu přeskočit ověření certifikátu oracle utl_http?