c# - 如何消除重复的 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我们在一个类中执行这个。
谢谢你。
解决方案
需要对多个表执行相同的操作通常是糟糕的架构设计。请详细说明您的架构。
您可以编写一个存储过程来构造(通过、、、CONCAT
)PREPARE
多个EXECUTE
表上的相同查询。它还可以查询information_schema.TABLES
以发现表名。
SELECT COUNT (*) AS ROW_COUNT FROM *<DATABASE NAME>*
不可能。你可以COUNT(*)
在一个表上做,但不能在一个数据库上做。(术语问题?一个“数据库”包含几个“表”;一个表包含“行”数据。)
推荐阅读
- python - 如何在python中编辑输入的文本
- python-3.x - 上述样本的 t-statistic,并在单独的行中显示 t-score 和 p-value
- ios - UIBarButtonItem 文本非常靠近右边缘
- php - Laravel 查询单个列的总和
- graphql - 如何在 Apollo 中打开和关闭轮询?
- c++ - 使用策略模式设计软件的问题
- javascript - 使用 PWA 构建应用程序
- google-cloud-platform - 使用“gcloud container clusters”和“kubectl”命令在 GCP 上配置 K8S 集群时,它们有什么区别?
- javascript - 使用管道和订阅时在哪里放置我的加载控制器?
- python-3.x - 使用 xlsxwriter 将大批量 csv 转换为 xlsx 时,索引 0 超出轴 0 的范围,大小为 0