#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
Когда я удаляю пользователя из своей базы данных, компонент database Engine также выполняет каскадное удаление в других таблицах.
DELETE FROM Users WHERE Id = 'A022408A-745B-464C-93C4-30B45C55D1E3'
(затронуто 11 строк)
(Затронуто 224 строки)
(Затронута 1 строка (строки))
(Затронута 1 строка (строки))
(Затронута 1 строка (строки))
(Затронуты 32 строки)
(Затронута 1 строка (строки))
(затронуто 56 строк)
(Затронуто 50 строк)
(Затронуто 6 строк)
(Затронуто 0 строк)
(Затронута 1 строка (строки))
(Затронута 1 строка (строки))
Есть ли способ отобразить имя таблицы для каждого результата, например:
(затронуто 56 строк) в назначениях таблицы
Комментарии:
1. получите определения fk из information_schema и отфильтруйте те, которые не имеют каскадного удаления.
2. Думаю, вам нужно настроить триггеры, расширенные события или аналогичные трассировки, если вы хотите сопоставить количество удаленных строк с таблицей.
3. Вы могли бы использовать
SET STATISTICS IO
для просмотра имен таблиц. Но в этом случае, если есть триггеры, ТогдаSET STATISTICS IO ON
также будет возвращена информация (логические и физические чтения и т. Д.) О таблицах, К которым обращаются внутри / с помощью триггеров.4. ВЫБЕРИТЕ * ИЗ INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS КАК rc, ГДЕ rc.UNIQUE_CONSTRAINT_NAME = ПОРЯДОК ‘PK_Users’ ПО rc.CONSTRAINT_NAME
Ответ №1:
Это довольно долгий путь, чтобы решить эту проблему, но как насчет установки триггера для всех таблиц, который PRINT
выводит имя таблицы всякий раз, когда строка удаляется?
Не совсем то же самое, что вам нужно, но это дало бы по существу ту же информацию. Вы могли бы даже вернуть некоторые другие, возможно, полезные, например, первичные ключи удаляемых строк…