标记中的 NullDisplayText 与 SQL 中的 ISNULL(field, 0) ?
题
使用哪种方法更好:
BoundField.NullDisplayText
未设置。SQL 查询中预见到 NULL-case,即SELECT ISNULL(amount, 0) FROM table
或者
BoundField.NullDisplayText
已设置,例如“0.00%”。SQL 查询中没有预见到 NULL-case,即SELECT amount FROM table
你怎么认为?
解决方案
你能两全其美吗?
- ISNULL 仅适用于这种情况
- 格式/逻辑应该在 UI 中
- 使用“金额”的其他客户端可能期望 NULL,因此您现在拥有不一致的“合同”
- 0 表示零,NULL 表示未知/无:2个不同的状态
其他提示
显然是第一个,因为您使用 ISNULL 进行过滤。
我认为第二个选择更好。通常,在中间层或表示层而不是数据库中格式化输出更好。因此,我希望将空值返回到数据层代码之上的层,并让它决定如何显示,而不是在数据库中做出选择。
通过将空值转换为零,您可以向所有使用查询的系统声明空值等同于用户故意输入零。如果确实如此,那么可以使用 Coalesce 而不是 IsNull 并将 null 转换为零。但是,如果即使有极小的可能性,即查询将被重用,并且缺少值的处理方式可能与输入零不同,那么我将向中间层返回空值,并让它决定如何处理它。
区别在于 0.00 表示该字段有值,而 NULL 表示相反。因此,从数据健全性的角度来看,前者是正确的。
不隶属于 StackOverflow