请教一个逻辑或错误检查位置的问题

秋天之落叶 2025-04-17 09:19:00

比如按照条件由手工表A(可能有错误项)循环生成表B,A里面有几个字段值需要验证合规性或逻辑关系,大家一般的做法是在循环外单独验证后再循环生成B表,还是在循环生成B表时,一行一行的验证不合规后回滚?假如A表有一千行数据吧。

哪种方式最优?请高手指教!

...全文
295 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
daigua1987 04-19
  • 打赏
  • 举报
回复

可以再B表些一个触发器,再触发器里面做验证

  • 打赏
  • 举报
回复

DS的回答
Delphi + SQL Server 数据验证与处理策略
对于从手工表A生成表B的处理,在Delphi和SQL Server环境下,有几种常见的做法:
推荐做法

  1. 先验证后处理(推荐)
    优点:
    一次性发现所有问题,用户可以批量修正
    处理过程更高效,不需要频繁回滚
    用户体验更好,知道所有问题后再处理
  2. 批量处理结合事务
    对于1000行数据量,建议使用批量操作而非单行处理
    使用SQL Server的事务确保一致性
    不推荐做法
    单行验证+回滚
    缺点:
    性能差(1000次验证+可能的回滚)
    用户体验不好(需要反复处理错误)
    代码复杂度高
    性能优化建议
    对于1000行数据,尽量使用批量SQL操作而非循环单行处理
    考虑使用存储过程将验证和处理逻辑放在服务器端
    对大表操作时,可以分批处理(如每次100条)
    最佳实践是:先全面验证,再批量处理,这样既保证了数据质量,又获得了最佳性能。
  • 打赏
  • 举报
回复

写个存储过程验证表数据的有效性,返回部分有效数据或者空数据集,取决于你的需要了,然后客户端只通过存储过程取数据即可,这样验证逻辑改动后,客户端不用修改。

  • 举报
回复
@日立奔腾浪潮微软松下联想 这个比较有效。
tanqth 04-17
  • 打赏
  • 举报
回复

你这问题,其实与你的使用环境还是有关系的。例如,如果只是一次性(以后不会再用)的处理A表的错误数据,就1K条数据,想怎么处理就怎么处理,不用去考虑效率。再如:如果你那验证条件比较简单(可以直接通过SQL验证),那么,一条SQL就能把正确的数据生成新表B,不需要循环,而且很快。

tanqth 04-17
  • 打赏
  • 举报
回复

读A表记录,验证是否正确,正确的写入到B表,错误的忽略,然后继续读取A表下一条记录、验证。

  • 举报
回复
@tanqth 如果遇到致命性错误,效率有点低,前面的白干了
tanqth 04-17
  • 举报
回复
@秋天之落叶 其实,重点内容还是你具体验证的是什么。只是验证合规性或逻辑关系,就不清楚你说的“致命性错误”又会是什么了。
tanqth 04-17
  • 举报
回复
@秋天之落叶 例如:如果你要导入一个EXCEL表到数据,业务逻辑上应该是先验证数据内容,正确后使用批量插入方式一次性导入到数据库里。

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧