我有一个代码块正在重复执行,但是只更改了表名。
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。我们在一个类中执行此操作。
谢谢。
答案 0 :(得分:0)
通常需要对多个表执行相同的操作的架构设计很差。请详细说明您的架构。
您可以编写一个存储过程来构造(通过CONCAT
,PREPARE
,EXECUTE
)多个表上的相同查询。它还可以询问information_schema.TABLES
以发现表名。
SELECT COUNT (*) AS ROW_COUNT FROM *<DATABASE NAME>*
是不可能的。您可以在表上执行COUNT(*)
,但不能在数据库上执行。 (术语问题?“数据库”包含几个“表”;一个表包含“行”数据。)