[英]SQL COALESCE vs. DBNull check in C#
在我的项目中,我必须从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.RemoveNull
在以下位置( int
版本, string
版本类似):
public static int RemoveNull(object data, int defaultValue)
{
if (data is DBNull || data == null)
return defaultValue;
return int.Parse(data.ToString());
}
所以我想知道SQL的COALESCE
或ISNULL
是否可以更快地完成相同的工作。 有人做了类似的比较吗? 哪种方法更有效?
从数据库返回数据时,您可以
select COALESCE (data ,defaultValue) from table
这样会更快,因为不需要从前端代码执行RemoveNull函数
cu.LocalId = dr["LocalId"] ?? "";
而是在您的sql中使用以下语句:
SELECT ISNULL(value,0)
当为NULL时,它将始终返回0。 因此,您不必在代码端进行转换。
' COALESCE '返回其参数中的第一个非null表达式,因此您可能会使用ISNULL
。
在数据库查询中使用ISNULL
将更快。 假设您有1m条记录,并且您调用C#方法1m次,这肯定会花费一些时间来执行。
另一方面,SQL引擎经过了优化,可以处理大量记录。 但这还不够灵活。 您不能使用一些复杂的逻辑来轻松更改默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.