Альтернатива динамическому sql и для каждого цикла - PullRequest
0 голосов
/ 20 января 2019

Мне нужно выполнить один и тот же оператор выбора для 5 разных экземпляров одного и того же источника db - 1 на клинику - и объединить набор результатов вместе для дальнейшей обработки.Существующий скрипт, который мне поручено поддерживать, выполняет a для каждого цикла (1 итерация на экземпляр) и подставляет имя db в операторах select для каждой итерации.В настоящее время имена БД получаются при выборе БД из мастера, где имя в 'db 1, db2, db3, db4, db5'.

Я бы предпочел хранить справочную таблицу с каждым из имен БД и флагом того, включены ли они.Но есть ли альтернатива для каждого цикла?

1 Ответ

0 голосов
/ 20 января 2019

Таким образом, у вас есть 5 разных клиник, и у каждой есть база данных с именами: db1, db2, db3, db4, db5.

И имена баз данных все хранятся в строковой переменной как "db1, db2, db3, db4, db5 ", которые затем можно использовать в качестве массива для сортировки имен баз данных.

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

И, по крайней мере, циклы не используют какую-то простую итерациюкак это:

For i = 1 to 5
    strDBName = "db" & i
Next

Проблема с использованием i для итерации заключается в том, что если клиника 2 больше не активна и, следовательно, db2 больше не должен использоваться.И, конечно, если есть новая клиника, то необходимо заменить «Для i = 1–5» на «Для i = 1–6».

Итак, учитывая вышеперечисленные худшие способыделать что-то вроде текущего способа (имена БД в строковой переменной, которые можно перебрать в виде массива).И идея, возможно, «держать справочную таблицу с каждым из имен БД и флажком для того, включены ли они», мне кажется странным способом сделать то, что вы уже делаете, и лично я все за »оставьте это простым "и" если это не сломано, не исправляйте это. "

РЕДАКТИРОВАТЬ:
Но чем больше я думаю об этом, взяв" держать справочную таблицу с каждым из имен БДи флаг для того, включены ли они, «идея и выполнение с этим немного», следующее кажется естественным (но, конечно, возможно, убедитесь, что только пользователи с правами администратора могут видеть любые поля о конкретной базе данных):

Таблица клиникс такими полями, как:
ClinicID
ClinicName
ClinicAddress
ClinicDBName - Примечание может хранить имя БД здесь
ClinicIsInactive

...