Скрипт замены данных из списка

Всем привет! Имеется sql запрос, в рамках которого хотелось бы его размножить на все имеющиеся сервера.

SELECT COUNT(*), SUM(changecash) FROM consolidation.set000_cashpayment
UNION ALL
SELECT COUNT(*), SUM(changecash) FROM setretail.set000_cashpayment where id <= (select max(id) from consolidation.set000_cashpayment );

Хотелось бы увидеть его в таком формате:

SELECT COUNT(*), SUM(changecash) FROM consolidation.set000_cashpayment
UNION ALL
SELECT COUNT(*), SUM(changecash) FROM setretail.set000_cashpayment where id <= (select max(id) from consolidation.set000_cashpayment );

SELECT COUNT(*), SUM(changecash) FROM consolidation.set001_cashpayment
UNION ALL
SELECT COUNT(*), SUM(changecash) FROM setretail.set001_cashpayment where id <= (select max(id) from consolidation.set001_cashpayment );

SELECT COUNT(*), SUM(changecash) FROM consolidation.set002_cashpayment
UNION ALL
SELECT COUNT(*), SUM(changecash) FROM setretail.set002_cashpayment where id <= (select max(id) from consolidation.set002_cashpayment );

Причем нумерация в моем случае идет от 000 до 019 с пропуском кодов 009,013. Как это возможно реализовать без Ctrl + F и Ctrl + H Всем заранее спасибо!


Ответы (2 шт):

Автор решения: Герман Борисов

Можно сделать выборку из sys.objects, добавив фильтр по имени like 'set[0-9][0-9][0-9]_cashpayment', и вы получите список нужных таблиц. Далее на его основе строить динамический запрос.

→ Ссылка
Автор решения: Вячеслав Иванов

Не знаю почему модераторы убрали все теги, кроме SQL, админ им судья.
Проблему решил написанием скрипта autohotkey. Выделяем текст со значениями 001 и нажимаем ALT+1, получаем размноженную строчку с исключениями 9, 13 магазинов.

!1::
adress := A_Temp "\Loop.txt"
Send ^c
file := FileOpen(adress, "w")
Loop
{
    if a_index > 19
        break  ; Terminate the loop
    else if a_index = 9
        continue ; Skip the below and start a new iteration
    else if a_index = 13
        continue ; Skip the below and start a new iteration
    else 
    {
        if a_index < 10
        {
            NewStr := StrReplace(Clipboard, "001", 00 . a_index)
        }
        else
        {
            NewStr := StrReplace(Clipboard, "001", 0 . a_index)
        }
        file.WriteLine(NewStr)
    }
}
file.Close()

file := FileOpen(adress, "r")
TestString := file.Read()
file.Close()

FileDelete, adress

Clipboard := TestString 
Send ^v

Return

→ Ссылка