SQL выбирает записи из произвольного числа одинаковых таблиц
Я пытаюсь запросить базу данных (SQLServer) с несколькими таблицами одинаковой структуры и со связанными именами, т.е.
[TABLE 01 $TRANSACTIONS]
[TABLE 02 $TRANSACTIONS]
...
[TABLE (n) $TRANSACTIONS]
У меня есть запрос, возвращающий нужные записи по одной таблице за раз, и я могу вручную выбрать несколько таблиц с
SELECT {QUERY01} FROM [TABLE 01 $TRANSACTIONS]
UNION
SELECT {QUERY02} FROM [TABLE 02 $TRANSACTIONS]
...
SELECT {QUERY(n)} FROM [TABLE (n) $TRANSACTIONS]
Общий запрос, в который я подставляю нужное имя таблицы, занимает около 200 строк, включая функцию ROWNUMBER()/PARTITION BY, несколько соединений с соответствующими таблицами и некоторое упорядочение.
Со временем будут добавлены новые таблицы и n изменится.
Кто-нибудь может предложить способ выбора UNION записей из всех n таблиц для произвольных значений n?
Примечание: список из n таблиц можно легко получить с помощью запроса к таблице sysobjects.
SELECT Name FROM sysobjects
WHERE Type = 'U'
AND Name LIKE '%$TRANSACTIONS'
ORDER BY Name
2 ответа
AFAIK, лучше всего использовать запрос sysobjects для периодического создания нового определения представления.
Возможно, вам удастся создать триггер DDL, который запускает процедуру для повторного создания этого представления при изменении ваших таблиц - я действительно не знаю. Конструкции БД, подобные этой, - крушение поезда.
Вы можете навести курсор на запрос sysobjects и создать оператор sql. Затем вы можете вызвать sp_executesql, чтобы запустить его. Исходя из опыта, я могу вам сказать, что это проблема в A$$ для отладки. Я также ожидал бы, что это решение развалится с любым обновлением поставщика. Удачи.