Автоматизация запросов SQL, группировка по с изменением только имени таблицы?

#sql-server-2012 #automation

#sql-server-2012 #автоматизация

Вопрос:

У меня есть список таблиц, которые я хочу суммировать таким же образом, за исключением того, что имена таблиц изменятся, может кто-нибудь указать мне на правильный инструмент для этой работы?

Пример:

выберите strm, снимок, количество (*) из таблицы1, где strm в (‘2167′,’2157’) группируется по strm, порядок снимков по strm, моментальный снимок

выберите strm, снимок, количество (*) из table2, где strm в (‘2167′,’2157’) группируется по strm, порядок снимков по strm, снимок

выберите strm, снимок, количество (*) из table3, где strm в (‘2167’, ‘2157’) группируется по strm, порядок снимков по strm, снимок

Я получаю желаемые результаты при таком подходе, но это кажется громоздким с 40-60 таблицами одна за другой… Я использую SQL MS 2016, если это поможет с моими параметрами. TIA 8)

Комментарии:

1. PS Я люблю SQL, но я полный новичок. Я исхожу из базы данных Unidata, это полностью отличается от SQL. … упс, и я имел в виду SQL SMS 2016.

Ответ №1:

Ниже будет выполнен поиск по всем таблицам в вашем каталоге, содержащим как strm , так и snapshot столбец, и динамически сформирован ваш запрос.

 declare @TSQL nvarchar(max) = (select distinct 'select strm, snapshot from [' 
TABLE_SCHEMA   '].['  
TABLE_NAME   '] where strm in ('2167','2157') group by strm, snapshot order by strm, snapshot '
from INFORMATION_SCHEMA.TABLES T0 
where exists(select 1 from INFORMATION_SCHEMA.COLUMNS C1 where C1.COLUMN_NAME = 'strm' and T0.TABLE_SCHEMA = C1.TABLE_SCHEMA and T0.TABLE_NAME = C1.TABLE_NAME)
and exists(select 1 from INFORMATION_SCHEMA.COLUMNS C2 where C2.COLUMN_NAME = 'snapshot' and T0.TABLE_SCHEMA = C2.TABLE_SCHEMA and T0.TABLE_NAME = C2.TABLE_NAME)
for XML PATH(''))

exec sp_EXECUTESQL  @TSQL
  

Комментарии:

1. Я не смог заставить ваш код работать, однако, просто предположив, что я удалил часть кода where, и она работает, и жестко запрограммированный dbo. Я угадал несколько других вещей и получил его, чтобы добавить заголовок таблицы. потрясающее спасибо.

Ответ №2:

объявите @TSQL nvarchar(max) = (выберите distinct ‘выберите strm, snapshot, count(*) как ‘ T0.ИМЯ_ТАБЛИЦЫ ‘ из [dbo].[‘ ИМЯ_ТАБЛИЦЫ ‘] группировка по strm, порядок моментальных снимков по strm, моментальный снимок ‘ из INFORMATION_SCHEMA.ТАБЛИЦЫ T0, где существует (выберите 1 из INFORMATION_SCHEMA.COLUMNS C1, где C1.COLUMN_NAME = ‘strm’ и T0.TABLE_SCHEMA = C1.TABLE_SCHEMA и T0.TABLE_NAME = C1.TABLE_NAME) и существует (выберите 1 из INFORMATION_SCHEMA.COLUMNS C2, где C2.COLUMN_NAME = ‘snapshot’ и T0.TABLE_SCHEMA = C2.TABLE_SCHEMA и T0.ИМЯ_ТАБЛИЦЫ = C2.ИМЯ_ТАБЛИЦЫ) для XML-ПУТИ(«))

exec sp_EXECUTESQL @TSQL

—Спасибо, мистер Андерсон, это было большой помощью, я думаю, мне нужно поработать над TSQL.