如何在数据表中找到空单元格并替换为0

时间:2016-03-04 21:54:37

标签: c# sql sql-server datatable

我正在使用一个非常大的数据表,它有5000行和8000列。在数据表中有一些空单元格。我使用以下代码用0填充空单元格。但由于数据表非常大,速度真的很慢!我只是想问一下是否有其他方法而不是for循环。

for (int i = 0; i < SP_dt.Rows.Count; i++)
{
    for (int j = 0; j < SP_dt.Columns.Count; j++)
    {
        if (SP_dt.Rows[i][j].ToString() == "")
            SP_dt.Rows[i][j] = 0;
        Console.WriteLine("{0}  {1}",i,j);
    }

}

1 个答案:

答案 0 :(得分:1)

在SQL中比在C#代码中更好地解决问题,为查询创建存储过程,然后使用COALESCE系统函数。

COALESCE函数基本上会从左到右检查其参数中给出的一组元素,直到它发现它不是NULL并返回它。这样,您可以将默认值0放在COALESCE的最后一个元素中:

create procedure spMyProc
as
begin
  select 
    COALESCE(colName1HavingNumericDataTypeToBeChecked, 0),
    COALESCE(colName2HavingNumericDataTypeToBeChecked, 0), 
    COALESCE(colNameNHavingNumericDataTypeToBeChecked, 0) 
  from tableName
end

然后在您的C#代码中,您只需call that stored procedure

如果您的colName1HavingNumericDataTypeToBeChecked不是NULL,则会返回colName1HavingNumericDataTypeToBeChecked中的值。如果是NULL,那么它会查找下一个项目并找到0(不是NULL),它将返回0