【问题标题】:Better way of reading and accumulating data from sql从 sql 读取和累积数据的更好方法
【发布时间】:2014-04-14 13:53:13
【问题描述】:

我正在研究使用 C# 从 sql 读取数据的一些可能性,我确信存在更好的方法。

我有一个(相当复杂的)sql select 语句,它返回 3 列。例如。人员 ID、TaskID 和工作时间

我想做的是用 2 列填充另一个表,数据应该类似于:

COL1     |   COL2
---------------------
"John"   |   "Tsk01 (2 Hours), Tsk02 (7 Hours), Tsk03 (4 Hours)" 
"Peter"  |   "Tsk01 (4 Hours), Tsk03 (2 Hours), Tsk04 (3 Hours)"

因此,一个明显的方法是将我的 sql 语句放入数据读取器(按人排序),遍历它,然后每次我有一个新人时将数据写入我的第二个表。但这只是感觉很麻烦。一定有更简单的方法吗?

【问题讨论】:

  • 为什么你想要一个包含逗号分隔的值列表的字段?这是一个 SQL 反模式。您开始使用的 (标准化) 结构是最佳实践。
  • 可接受的问题...第二个表实际上是作为审计跟踪。它“重要”的只是第一列。第二列将只是附加注释。即使数据被截断也不是问题。
  • 甚至你的审计表也应该被规范化。假设 'John''Peter' 实际上在另一个表中有 id,你只会有一个 3 列整数的表,每列 4 个字节,每行总共 12 个字节(每个人/任务组合)。但是,您的字符串占用的字节数要多得多; ', Tsk02 (7 Hours)' 远远超过 12 个字节。
  • 是的。但是表设计已经完成了一段时间,目前无法真正更改。我将不得不使用我所拥有的。

标签: c# sql datareader


【解决方案1】:

很麻烦,效率很低。

这里有一些你应该考虑的因素:

  • 不要违反数据库字段的atomicity。每个字段一条信息。
  • 在将数据提取到代码中之前,让数据库引擎完成所有工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多