Как вернуть имя таблицы, используемое из инструкции delete?

#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 выводит имя таблицы всякий раз, когда строка удаляется?

Не совсем то же самое, что вам нужно, но это дало бы по существу ту же информацию. Вы могли бы даже вернуть некоторые другие, возможно, полезные, например, первичные ключи удаляемых строк…