строка + выбор порядка запросов по + строке; - PullRequest
0 голосов
/ 12 апреля 2019

Я хочу вывод, как получить все таблицы из базы данных с именем «T_». Я написал запрос, он получает все имя таблицы. но я не хочу получать запрос как «выберите количество (*) из всех таблиц в объединении базы данных»

означает, что я хочу получить

select count(*) from T1 UNION
select count(*) from T2 UNION
select count(*) from T3 UNION...

и т. Д. Есть 1000 строк, поэтому я хочу запрос, который выдаст сам запрос count (*).

select 'select count(*) from ' + table_name from INFORMATION_SCHEMA.TABLES where table_type='BASE TABLE' 
and left(table_name,2) = 'T_'
order by TABLE_NAME

этот запрос дает все select count(*) table names like T_*

select 'select count(*) from ' + table_name from INFORMATION_SCHEMA.TABLES where table_type='BASE TABLE' 
and left(table_name,2) = 'T_'
order by TABLE_NAME
+'UNION';

Получение выходных данных

select count(*) from T_T1
select count(*) from T_T2
select count(*) from T_T3

ожидаемый результат

select count(*) from T_T1 UNION
select count(*) from T_T2 UNION
select count(*) from T_T3 UNION

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

order by TABLE_NAME + ' UNION' означает, что вы хотите сделать заказ по значению TABLE_NAME с конкатенацией UNION, к которому присоединены (что ничего не изменит)

Вы должны поместить UNION (я действительно предлагаю UNION ALL здесь) в ваш SELECT: ...table_type='BASE TABLE' + N' UNION ALL '.

Я также предлагаю изменить table_name на QUOTENAME(table_name). Дать вам окончательный запрос:

SELECT N'SELECT COUNT(*) FROM' + QUOTENAME(TABLE_NAME) +  NCHAR(13) + NCHAR(10) + N'UNION ALL'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
  AND LEFT(TABLE_NAME, 2) = 'T_'
ORDER BY TABLE_NAME;
1 голос
/ 12 апреля 2019
select 'select count(*) from ' + table_name + ' UNION ' from INFORMATION_SCHEMA ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...