Как исключить повторяющиеся запросы SQL для выполнения в разных именах таблиц - PullRequest
0 голосов
/ 03 сентября 2018

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

 SQLData stagingData = runtime.SQLExecuteQuery(integrationDatabase, "SELECT COUNT (*) AS ROW_COUNT FROM *<DATABASE NAME>*");

        foreach(SQLDataRow stagingDataRow in stagingData)
        {
            stageCount = runtime.SQLDataRowGetInteger(stagingDataRow, "ROW_COUNT");
        }

        if(stageCount !=0)
        {
            writeStaging = runtime.SQLExecuteStoredProcedure(integrationDatabase, "*<STORED PROCEDURE NAME>*", 0);
            SQLData transformedData = runtime.SQLExecuteQuery(integrationDatabase,
                "SELECT COUNT (*) AS ERROR_COUNT FROM *<TABLE NAME>* WHERE " +
                "[Entity] LIKE '_ERROR_%' OR [Name] LIKKE '_ERROR_'%");

            foreach (SQLDataRow transDataRow in transformedData)
            {
                errorCount = runtime.SQLDataRowGetInteger(transDataRow, "ERROR_COUNT");
            }

            if (errorCount == 0)
            {
                writeTransformed = runtime.SQLExecuteStoredProcedure(integrationDatabase, "*<STORED PROCEDURE NAME>*", 0);
            }
            else
            {
                return false;
            }
        }

Это кодовый блок, который выполняется повторно. Курсив - это единственное, что меняется.

Мы хотели бы уменьшить количество строк для этой части, но мы просто не смогли найти хорошую структуру для этого.

Мы надеемся услышать ваши предложения.

P.S. Мы выполняем это внутри класса.

Спасибо.

1 Ответ

0 голосов
/ 13 сентября 2018

Обычно плохой дизайн схемы требует, чтобы одно и то же делалось с несколькими таблицами. Пожалуйста, опишите вашу схему.

Вы можете написать хранимую процедуру для построения (через CONCAT, PREPARE, EXECUTE) одного и того же запроса в нескольких таблицах. Он также может запросить information_schema.TABLES, чтобы узнать имена таблиц.

SELECT COUNT (*) AS ROW_COUNT FROM *<DATABASE NAME>* невозможно. Вы можете сделать COUNT(*) для таблицы , но не для базы данных . (Терминологическая проблема? «База данных» содержит несколько «таблиц»; таблица содержит «строки» данных.)

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