Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Намерете референтни обекти в SQL Server:sys.dm_sql_referencing_entities()

В SQL Server можете да използвате sys.dm_sql_referencing_entities() функция за динамично управление на системата, за да получите списък с всички обекти в текущата база данни, които препращат към друг дефиниран от потребителя обект по име.

С други думи, той връща списък с обекти, които зависят от дадения обект.

По-конкретно, той докладва за следните типове обекти в текущата база данни, които препращат към посочения обект:

  • Обвързани със схема или необвързани със схема обекти
  • Задействания на DDL на ниво база данни
  • Задействания на DDL на ниво сървър

Синтаксис

Синтаксисът е така:

sys.dm_sql_referencing_entities ( ' schema_name.referenced_entity_name ' , '  ' )  ::={ ОБЕКТ | ТИП | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION }

Пример 1 – Основен пример

Ето един основен пример за употреба:

ИЗПОЛЗВАЙТЕ WideWorldImporters;ИЗБЕРЕТЕ *ОТ sys.dm_sql_referencing_entities ('Application.Cities', 'OBJECT');

Резултат:

+---------------------+------------------ ---------+----------------+--------------------- +--------------------+-------------------- -+| referencing_schema_name | референтно_име_на_обект | referencing_id | референтен_клас | referencing_class_desc | зависи от_обаждащия се ||--------------------------+------------------- --------+------------------+---------------------+ -------------------------+----------------------- || Приложение | Определяне на достъпа на клиента | 1051150790 | 1 | OBJECT_OR_COLUMN | 0 || Интеграция | GetCityUpdates | 1758629308 | 1 | OBJECT_OR_COLUMN | 0 || Уебсайт | Клиенти | 1694629080 | 1 | OBJECT_OR_COLUMN | 0 || Уебсайт | Търсене за клиенти | 942626401 | 1 | OBJECT_OR_COLUMN | 0 || Уебсайт | Търсене на доставчици | 926626344 | 1 | OBJECT_OR_COLUMN | 0 || Уебсайт | Доставчици | 1678629023 | 1 | OBJECT_OR_COLUMN | 0 |+--------------------------+------------------- --------+------------------+---------------------+ -------------------------+----------------------- +

В този пример има шест обекта, които препращат към „Application.Cities“ в базата данни „WideWorldImporters“.

Microsoft изрично препоръчва да не използвате звездичката (* ), за да изберете всички колони от динамични изгледи за управление и функции (от които sys.dm_sql_referencing_entities() е един). Това е така, защото техните схеми и данните, които връщат, може да се променят в бъдещи версии на SQL Server. Това може да доведе до добавяне на колони в края на списъка с колони в бъдещи версии, което може да обърка приложението ви, ако разчитате на звездичката, за да изберете всички колони.

Следователно предишният код трябва да бъде пренаписан на това:

Пример:

ИЗПОЛЗВАЙТЕ WideWorldImporters;ИЗБЕРЕТЕ referencing_schema_name, referencing_entity_name, referencing_id, referencing_class, referencing_class_desc, is_caller_dependentFROM sys.dm_sql_referencing_entities ('Application.Cities', 'OBJECT) 

Разбира се, винаги можете да посочите по-малко колони, ако желаете.

Пример 2 – Вземете типа на референтния обект

Горният пример е добър и добър, но не ни казва типа на референтния обект. С други думи, не можем да видим дали това е изглед, съхранена процедура и т.н.

Можете да получите тази информация, като се присъедините към sys.dm_sql_referencing_entities() с sys.objects .

Така че можем да модифицираме предишния пример по следния начин:

SELECT o.type_desc 'Тип', re.referencing_schema_name 'Схема', re.referencing_entity_name 'Име'FROM sys.dm_sql_referencing_entities ('Application.Cities', 'OBJECT') reINNER JOIN =reINNER JOIN sys.objects_id oON .object_idORDER BY 'Type' ASC; 

Резултат:

+--------------------------------+----------- --+------------------------------+| Тип | Схема | Име ||----------------------------------+------------ -+-------------------------|| SQL_INLINE_TABLE_VALUED_FUNCTION | Приложение | Определяне на клиентски достъп || SQL_STORED_PROCEDURE | Интеграция | GetCityUpdates || SQL_STORED_PROCEDURE | Уебсайт | Търсене за клиенти || SQL_STORED_PROCEDURE | Уебсайт | Търсене на доставчици || ВИЖТЕ | Уебсайт | Доставчици || ВИЖТЕ | Уебсайт | Клиенти |+---------------------------------+------------ -+------------------------+

Пример 3 – Типове, дефинирани от потребителя

Ето пример за използване на sys.dm_sql_referencing_entities() за връщане на обекти, които препращат към даден тип псевдоним, дефиниран от потребителя.

За този пример създадох потребителски дефиниран псевдоним, наречен clientcode . След това го използвах в две колони (в две различни таблици) и създадох също така съхранена процедура, която препраща към типа по име (тя приема аргумент, наречен @ClientCode който е от clientcode тип).

За да върнете дефиниран от потребителя тип, използвайте TYPE като втори аргумент.

Пример:

ИЗПОЛЗВАЙТЕ тест;ИЗБЕРЕТЕ referencing_entity_nameFROM sys.dm_sql_referencing_entities ('dbo.clientcode', 'TYPE');

Резултат:

+---------------------+| рефериращо_име_на_обект ||------------------------------|| uspGetClient || uspGetOrdersByClient |+--------------------------+

По имената мога да разбера, че и двете са съхранени процедури (и двете са с префикс с usp , което е обичайна конвенция при създаване на дефинирани от потребителя съхранени процедури), но можем да потвърдим това, като проверим sys.objects преглед на системния каталог още веднъж:

SELECT o.type_desc 'Тип', re.referencing_schema_name 'Схема', re.referencing_entity_name 'Име'FROM sys.dm_sql_referencing_entities ( 'dbo.clientcode', 'TYPE') reINNER JOIN sys.objects oON re. .object_idORDER BY 'Type' ASC; 

Резултат:

+---------------------+----------+------------ ----------+| Тип | Схема | Име ||---------------------+----------+------------ ---------|| SQL_STORED_PROCEDURE | dbo | uspGetClient || SQL_STORED_PROCEDURE | dbo | uspGetOrdersByClient |+---------------------+----------+------------ ---------+

Имайте предвид, че този тип псевдоним се използва в колоните на две таблици в тази база данни. Те обаче не се появяват в нашия списък със зависимости, тъй като дефинираният от потребителя тип не е в дефиницията на изчислена колона, CHECK ограничение или DEFAULT ограничение в таблицата.

Също така една от таблиците препраща към другата таблица чрез ограничение за външен ключ в колоната, която използва dbo.clientcode потребителски дефиниран тип, но това също не се появява в нашия списък.

Официална документация

За по-подробна информация вижте sys.dm_sql_referencing_entities на уебсайта на Microsoft.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възможно ли е да се изберат данни на sql сървъра, като се използва редната позиция на колоната

  2. Копирайте данни от Salesforce към SQL Server със Spectral Core

  3. Запитване на SQL Server:Бързо с буквално, но бавно с променлива

  4. Получавам съобщение. Беше направен опит за зареждане на програма с грешка при неправилен формат в проект за репликация на SQL Server

  5. Какво е застой на SQL Server?