如何消除重复的SQL查询以在不同的表名中执行

时间:2018-09-03 08:58:20

标签: c# mysql performance foreach

我有一个代码块正在重复执行,但是只更改了表名。

 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 :(得分:0)

通常需要对多个表执行相同的操作的架构设计很差。请详细说明您的架构。

您可以编写一个存储过程来构造(通过CONCATPREPAREEXECUTE)多个表上的相同查询。它还可以询问information_schema.TABLES以发现表名。

SELECT COUNT (*) AS ROW_COUNT FROM *<DATABASE NAME>*是不可能的。您可以在上执行COUNT(*),但不能在数据库上执行。 (术语问题?“数据库”包含几个“表”;一个表包含“行”数据。)