|
| 1 | +/*#info |
| 2 | +
|
| 3 | + # Autor |
| 4 | + Rodrigo Ribeiro Gomes |
| 5 | + |
| 6 | + # Descrição |
| 7 | + Esse script já me ajudou muitas e muitas vezes para achar as dependências de um objet, como view, procedure, etc. |
| 8 | + Você passa o nome da view, e então ele usa a DMV sys.sql_expression_dependencies recursivamente para achar todas as dependências. |
| 9 | + O legal, é que ele acha as dependências em outros bancos, então é bem útil. |
| 10 | + |
| 11 | + As colunas retornadas são: |
| 12 | + referenced_id = object_id da dependencia |
| 13 | + ReferencedObject = nome do objeto referenciado (sem o esquema) |
| 14 | + type_desc = Tipo do objeto dependente |
| 15 | + RefLevel = O nível de dependência. 1 é dependêcnia direta (está direto no código do objeto que você colocou). |
| 16 | + 2, ele encontrou em um dos obejtos de nível 1 |
| 17 | + 3, el encontrou em um dos objetos de nível 2 e por aí vai! |
| 18 | + RefChain = Uma representação visual da dependência, partindo do objeto que você passou até este atual. |
| 19 | + Com isso você consegue ver todos os objetos referenciados até chegar neste da linha respectiva. |
| 20 | + |
| 21 | +*/ |
| 22 | + |
| 23 | + |
| 24 | +;WITH Depends AS ( |
| 25 | + SELECT |
| 26 | + E.referencing_id |
| 27 | + ,E.referenced_id |
| 28 | + ,E.referenced_database_name |
| 29 | + ,ReferencedObject = CONVERT(nvarchar(1000),ISNULL(E.referenced_server_name+'.','')+ISNULL(E.referenced_database_name+'.','')+ISNULL(E.referenced_schema_name+'.','')+ISNULL(E.referenced_entity_name,'')) |
| 30 | + ,RefLevel = CONVERT(bigint,1) |
| 31 | + ,RefChain = CONVERT(nvarchar(max), OBJECT_NAME(E.referencing_id)+'->'+E.referenced_entity_name ) |
| 32 | + FROM |
| 33 | + sys.sql_expression_dependencies E |
| 34 | + WHERE |
| 35 | + E.referencing_id = OBJECT_ID('schema.NomeTabela') |
| 36 | + |
| 37 | + |
| 38 | + UNION ALL |
| 39 | + |
| 40 | + SELECT |
| 41 | + E.referencing_id |
| 42 | + ,E.referenced_id |
| 43 | + ,E.referenced_database_name |
| 44 | + ,ReferencedObject = CONVERT(nvarchar(1000),ISNULL(E.referenced_server_name+'.','')+ISNULL(E.referenced_database_name+'.','')+ISNULL(E.referenced_schema_name+'.','')+ISNULL(E.referenced_entity_name,'')) |
| 45 | + ,RefLevel = CONVERT(bigint,D.RefLevel + 1) |
| 46 | + ,RefChain = CONVERT(nvarchar(max), D.RefChain+'->'+E.referenced_entity_name ) |
| 47 | + FROM |
| 48 | + Depends D |
| 49 | + INNER JOIN |
| 50 | + sys.sql_expression_dependencies E |
| 51 | + ON E.referencing_id = D.referenced_id |
| 52 | + WHERE |
| 53 | + E.referenced_minor_id = 0 |
| 54 | + |
| 55 | +) |
| 56 | +SELECT |
| 57 | + D.referenced_id |
| 58 | + ,D.ReferencedObject |
| 59 | + ,O.type_desc |
| 60 | + ,D.RefLevel |
| 61 | + ,D.RefChain |
| 62 | +FROM |
| 63 | + Depends D |
| 64 | + LEFT JOIN |
| 65 | + sys.objects O |
| 66 | + ON (D.referenced_database_name IS NULL OR D.referenced_database_name = DB_NAME()) |
| 67 | + AND D.referenced_id = O.object_id |
| 68 | +ORDER BY |
| 69 | + D.RefLevel |
0 commit comments