首页 > 解决方案 > 如何消除重复的 SQL 查询以在不同的表名中执行

问题描述

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

 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;
            }
        }

这是重复执行的代码块。斜体的项目是唯一不同的东西。

我们想减少这部分的行数,但我们找不到一个好的结构来做这件事。

我们希望听到您的建议。

PS我们在一个类中执行这个。

谢谢你。

标签: c#mysqlperformanceforeach

解决方案


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

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

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


推荐阅读