Выбрать на нескольких таблицах, которые являются результатом другого выбора - PullRequest
0 голосов
/ 02 октября 2018

Мне нужно создать функцию, которая ищет все таблицы, содержащие определенное поле

select distinct(table_name) from information_schema.columns where column_name='fieldNeeded';

, а затем выполнить запрос для каждой найденной таблицы:

select * from table_name where ... <parameters> ; 

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 02 октября 2018

Если вы используете SQL-сервер ...

Вы можете использовать результат первого запроса - ввод для вашего курсора (цикл for в T-SQL), в котором вы динамически создаете и выполняетезапрос.Обратите внимание, что «dynamic sql» создает команду sql в формате строки (varchar), а затем запускает эту строку как sql-commant (что-то вроде: EXEC @SqlCommand), хотя есть и другие (более эффективные) способы выполнения динамического sql.

Чтобы закончить все хорошо, вы можете начать с создания временной таблицы и вставить результат в временную таблицу.И на каждой итерации курсора вы можете сохранить результат в temp-таблице

. В псевдокоде это будет выглядеть примерно так:

Create #TempTable with some columns

Create Cursor for:
    select distinct(table_name) 
    from information_schema.columns 
    where column_name='fieldNeeded'

For each element in the cursor (fetch next @table_name from the cursor)

    DECLARE @SqlCommand VARCHAR(250) = 
    'Insert Into #TempTable select * from ' + @table_name + 'where ... <parameters>'

    PRINT @SqlCommand -- can be useful to check the code you created
    EXEC @SqlCommand

End of cursor

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