0

在我的项目中,我必须从 SQL 中检索大量数据并将数据映射到对象字段;像这样的东西:

cu.UnitName = dr["UnitName"].ToString().Trim();
cu.LocalId = DbUtil.RemoveNull(dr["LocalID"], "");
cu.DatabaseName = DbUtil.RemoveNull(dr["DatabaseName"], "");
cu.DatabaseServer = DbUtil.RemoveNull(dr["DatabaseServer"], "");
cu.UserName = DbUtil.RemoveNull(dr["UserName"], "");
cu.Password = DbUtil.RemoveNull(dr["Password"], "");
cu.RoleId = DbUtil.RemoveNull(dr["RoleId"], 0);

以下是DbUtil.RemoveNullint版本,string版本类似):

public static int RemoveNull(object data, int defaultValue)
    {
        if (data is DBNull || data == null)
            return defaultValue;
        return int.Parse(data.ToString());
    }

所以我想知道 SQL 是否COALESCEISNULL更快地完成同样的工作。有人做过类似的比较吗?哪种方式会更有效率?

4

4 回答 4

0

从数据库返回数据时,你可以做

select COALESCE (data ,defaultValue) from table

这会更快,因为不需要从前端代码执行 RemoveNull 函数

于 2012-08-17T06:59:48.130 回答
0
cu.LocalId = dr["LocalId"] ?? "";
于 2012-08-17T07:01:12.387 回答
0

而是在您的 sql 中使用以下语句:

SELECT ISNULL(value,0)

当有 NULL 时,这将始终返回 0。因此,您不必在代码端进行转换。

请参考http://msdn.microsoft.com/en-us/library/ms184325.aspx

于 2012-08-17T07:02:30.423 回答
0

' COALESCE ' 返回其参数中的第一个非空表达式,因此您可能会使用ISNULL.

在您的数据库查询中使用ISNULL会快得多。假设您有 1m 条记录,并且您调用 C# 方法 1m 次,这肯定需要一些时间来执行。

另一方面,SQL 引擎经过优化以处理大量记录。但这不够灵活。您不能使用一些复杂的逻辑并轻松更改默认值。

于 2012-08-17T07:04:26.990 回答