Выберите * из n таблиц - PullRequest
       4

Выберите * из n таблиц

2 голосов
/ 26 сентября 2011

Есть ли способ написать запрос, например:

select * from <some number of tables>

..., где количество таблиц неизвестно?Я хотел бы избежать использования динамического SQL.Я хотел бы выбрать все строки из всех таблиц, которые (таблицы) имеют определенный префикс:

select * from t1
select * from t2
select * from t3
...

Я не знаю, сколько может быть t(n) (может быть 1, может быть20 и т. Д.) Структуры столбцов таблицы t не совпадают.Некоторые из них имеют 2 столбца, а некоторые - 3 или 4.

Использование динамического SQL не составит труда, но я хотел бы знать, есть ли способ сделать это, используя что-то вроде sys.tables.

ОБНОВЛЕНИЕ

Объяснение базового дизайна базы данных

N компаний зарегистрируют / войдут в мое приложение

Каждая компания настроит ОДИНтаблица с x столбцами

(x зависит от вида бизнеса, которым занимается компания, может быть разным, например, рассмотрим две компании: одна - плотник, а другая - газета)

Каждая компания заполняет свою собственную таблицу, используя созданный мной API

Что я делаю с данными:

У меня есть «процессор», который будет SQL или C # или любым другим.

Если для одной компании будет хотя бы одна строка, я сгенерирую запись в ОБЩЕЙ таблице.

Так что окончательные результаты будут все в одной таблице.

Кто-нибудь излюбая из этих N компаний войдет в систему и увидит, что ОБЩАЯ таблица отфильтрована по егоРусская компания.

Ответы [ 2 ]

10 голосов
/ 26 сентября 2011

Не было бы способа сделать это без динамического SQL. И наличие разных структур таблиц совсем не помогает.

Обновление

Не было бы простого способа вернуть желаемый результат в одном наборе результатов (набор результатов имел бы по крайней мере такое же число столбцов таблицы с большинством столбцов и даже не давало бы мне понять совместимость типов данных) ,

Однако вы должны проверить ответ @ KM. Это принесет несколько наборов результатов.

4 голосов
/ 26 сентября 2011

для отображения ВСЕХ таблиц, которые вы можете попробовать:

EXEC sp_msforeachtable 'SELECT * FROM  ?'

вы можете программировать включение / исключение таблицы, выполнив что-то вроде:

EXEC sp_msforeachtable 'IF LEFT(''?'',9)=''[dbo].[xy'' BEGIN SELECT * FROM  ? END ELSE PRINT LEFT(''?'',9)'
...