SQL. Найти всю информацию по связанным таблицам

Задача:

Проверить и найти все таблицы, где используется определенное значение из связанной таблицы. Т.е. есть документы, справочники, которые содержат конкретное значение из связанного справочника.

Решение для СУБД Oracle:

Узнаем все таблицы, в которых есть необходимое нам поле:
select * from dba_tab_columns where column_name like '%LAWACT_ID';

Далее, пишем запрос по каждой таблице:
select TABLE_NAME AS "ТАБЛИЦА",
   COLUMN_NAME AS "КОЛОНКА",
   'SELECT '''||TABLE_NAME||''''||' AS "Таблица", 
   count(1) AS "Количество" FROM '||TABLE_NAME||' WHERE '||COLUMN_NAME||' = <необходимый ID> UNION ALL' AS "СКРИПТ"
  from dba_tab_columns
 where column_name like 'KD_CODE' /*Укажите название поля (колонки) */
 --AND OWNER like '<schema_name>'; /*Укажите схему */

Далее, копируем значение из колонки "СКРИПТ", редактируем его, убирая UNION ALL в последней строке. В результате получим:

Таблица         |Количество|
----------------|----------|
AGREEMENT_LAWACT|         0|
AGREEMENT_LAWACT|         0|
BACKORDER       |         0|
BUDGORDER       |         0|


Аналогичное решение для СУБД Firebird:

SELECT rdb$relation_name AS "Таблица",
rdb$field_name AS "Колонка",
'SELECT '''||TRIM(rdb$relation_name)||''''||' AS "Таблица", count(1) AS "Количество" FROM '||
TRIM(rdb$relation_name)||' WHERE '||TRIM(rdb$field_name)||' = <необходимый ID> UNION ALL' AS "СКРИПТ"
   from rdb$relation_fields
  where rdb$field_name like '%ORGACCOUNT_ID%' /*Укажите название поля (колонки) */
--AND rdb$relation_name like '<table name>'; /*Укажите таблицу */

Комментарии

Популярные сообщения из этого блога

ЭС с ЦБ РФ. РЕКВИЗИТНЫЙ СОСТАВ ЭС

ТФФ 35.0. Полный перечень документов альбома ТФФ (Таблица 2)

Linux (РедОС). Сброс пароля

ТФФ 34.0. Полный перечень документов альбома ТФФ (Таблица 2)

ТФФ 32.0. Полный перечень документов альбома ТФФ (Таблица 2)