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

bpsygsoo  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(321)

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

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、 我们在一个类中执行这个。
谢谢您。

bfrts1fy

bfrts1fy1#

对多个表执行相同的操作通常是不好的模式设计。请详细说明你的计划。
您可以编写一个存储过程来构造(通过 CONCAT , PREPARE , EXECUTE )对多个表执行相同的查询。它也可以审问 information_schema.TABLES 查找表名。 SELECT COUNT (*) AS ROW_COUNT FROM *<DATABASE NAME>* 这是不可能的。你能做到的 COUNT(*) 在表上,而不是数据库上(术语问题?一个“数据库”包含几个“表”;表包含“行”数据。)

相关问题