Выполните объединение, если таблица с этими именами существует - PullRequest
1 голос
/ 10 июля 2019

У меня есть база данных посещаемости, где каждый месяц генерируется новая таблица как TRNS0419,TRNS0519,TRNS0619,TRNS0719. Для объединения данных я использовал Union. Но каждый месяц я вводил имя таблицы вручную, есть ли способ, если автоматически выбираются данные, когда генерируется новая таблица, такая как TRNS0819

Я пытался использовать union all, но нет таблицы для взятия, которой нет.

Select * from TRNS0419 union all Select * from TRNS0519
union all Select * from TRNS0619 union all Select * from TRNS0719

мой запрос не принимает union all Select * from TRNS0819, потому что он не доступен в db

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

1 Ответ

4 голосов
/ 10 июля 2019

Оберните следующий код в хранимой процедуре:

DECLARE @DynamicTSQLStatement NVARCHAR(MAX);

SELECT @DynamicTSQLStatement = STUFF
(
    (
        SELECT N' UNION ALL SELECT * FROM ' + '[' + SCHEMA_NAME([schema_id]) + '].[' + [name] + ']'
        FROM [sys].[tables]
        WHERE [name] LIKE 'TRNS%'
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)')
    ,1
    ,10
    ,''
);

EXEC sp_executesql @DynamicTSQLStatement;

Вы можете добавить дополнительные фильтры, когда имя таблицы извлекается из представления [sys].[tables].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...