Sql 如何在表的每一行上运行相同的查询?(MVC)

Sql 如何在表的每一行上运行相同的查询?(MVC),sql,mdf,database-table,local-database,Sql,Mdf,Database Table,Local Database,我目前有一个名为“Events”的表,其中有“EquipApprovedDate”、“EquipCalDueDate”和“ThemeColor”列。我想根据设备决战日期之前剩余的天数更新主题颜色 绿色=好 橙色=认为可以 红色=临界值 日历上登记的每台设备的总天数将不同。将使用此公式(totaldays=EquipalDueDate-EquipalApprovedDate)进行计算。剩余天数将使用此公式计算(remainingDays=EquicalDueDate-DateTime.Now) 如

我目前有一个名为“Events”的表,其中有“EquipApprovedDate”、“EquipCalDueDate”和“ThemeColor”列。我想根据设备决战日期之前剩余的天数更新主题颜色

绿色=好

橙色=认为可以

红色=临界值

日历上登记的每台设备的总天数将不同。将使用此公式(totaldays=EquipalDueDate-EquipalApprovedDate)进行计算。剩余天数将使用此公式计算(remainingDays=EquicalDueDate-DateTime.Now

如果剩余天数超过总天数的2/3将被标记为“绿色”

如果剩余天数小于总天数的2/3,但大于总天数的1/3,则标记为“橙色”

如果剩余天数小于总天数的1/3,则标记为“红色”

每次加载页面时,我都希望在表上应用整个过程,特别是在数据库中找到的每一行上。基本上是收集数据并返回每一行。目前,它只在列ThemeColor被更新为每一行的“绿色”时部分运行,无论发生什么情况。什么是正确的SQL查询

我已附上我目前的工作一起为您的看法

    con.Open();
        string yyy = "SELECT * FROM [Events]";
        using (SqlCommand cmd = new SqlCommand(yyy, con))
        {
            SqlDataReader reader = cmd.ExecuteReader();
            if (reader.Read())
            {
                String startdate = reader["EquipApprovedDate"].ToString();
                DateTime Sdate = DateTime.Parse(startdate);
                String enddate = reader["EquipCalDueDate"].ToString();
                DateTime Edate = DateTime.Parse(enddate);
                String themecolor = reader["ThemeColor"].ToString();

                double totaldays = (Edate - Sdate).TotalDays;
                double remainingDays = (Edate - DateTime.Now).TotalDays;

                if (remainingDays > (totaldays * (2 / 3)))
                {
                    string sqlCoC = "UPDATE Events SET ThemeColor = 'green'";

                    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MVCConnectionString"].ConnectionString))
                    {
                        SqlCommand coccmd = new SqlCommand(sqlCoC, con);
                        con.Open();
                        coccmd.ExecuteNonQuery();
                        con.Close();
                    }

                    //green = means good
                }
                else if ((remainingDays < (totaldays * (2 / 3))) && (remainingDays > (totaldays * (1 / 3))))
                {

                    string sqlCoC = "UPDATE Events SET ThemeColor = 'orange'";

                    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MVCConnectionString"].ConnectionString))
                    {
                        SqlCommand coccmd = new SqlCommand(sqlCoC, con);
                        con.Open();
                        coccmd.ExecuteNonQuery();
                        con.Close();
                    }

                    //orange = considered okay
                }
                else if (remainingDays < (totaldays * (1 / 3)))
                {

                    string sqlCoC = "UPDATE Events SET ThemeColor = 'red'";

                    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MVCConnectionString"].ConnectionString))
                    {
                        SqlCommand coccmd = new SqlCommand(sqlCoC, con);
                        con.Open();
                        coccmd.ExecuteNonQuery();
                        con.Close();
                    }

                    //red = critical
                }
                else { }
            }
            reader.Close();
            con.Close();
        }

con.Open();
字符串yyy=“从[事件]中选择*”;
使用(SqlCommand cmd=newsqlcommand(yyy,con))
{
SqlDataReader=cmd.ExecuteReader();
if(reader.Read())
{
字符串startdate=reader[“EquipApprovedDate”].ToString();
DateTime Sdate=DateTime.Parse(startdate);
字符串enddate=读取器[“EquipalDueDate”]。ToString();
DateTime-Edate=DateTime.Parse(enddate);
字符串themecolor=reader[“themecolor”].ToString();
double totaldays=(Edate-Sdate).totaldays;
double remainingDays=(Edate-DateTime.Now).TotalDays;
如果(剩余天数>(总天数*(2/3)))
{
string sqlCoC=“更新事件集颜色=‘绿色’”;
使用(SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionString[“MVCConnectionString”].ConnectionString))
{
SqlCommand COCMD=新的SqlCommand(sqlCoC,con);
con.Open();
coccmd.ExecuteNonQuery();
con.Close();
}
//绿色=意味着好
}
否则,如果((剩余天数<(总天数*(2/3))&(剩余天数>(总天数*(1/3)))
{
string sqlCoC=“更新事件集颜色='orange'”;
使用(SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionString[“MVCConnectionString”].ConnectionString))
{
SqlCommand COCMD=新的SqlCommand(sqlCoC,con);
con.Open();
coccmd.ExecuteNonQuery();
con.Close();
}
//橙色=认为可以
}
否则,如果(剩余天数<(总天数*(1/3)))
{
string sqlCoC=“更新事件集颜色='red'”;
使用(SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionString[“MVCConnectionString”].ConnectionString))
{
SqlCommand COCMD=新的SqlCommand(sqlCoC,con);
con.Open();
coccmd.ExecuteNonQuery();
con.Close();
}
//红色=临界值
}
else{}
}
reader.Close();
con.Close();
}

您实际上可以通过一个查询更新整个表:

declare @remaining int, @total int; update events 
set @remaining=datediff(day, getdate(), equipcalduedate),
@total=datediff(day, equipapproveddate, equipcalduedate),
themecolor=(case
   when @remaining < @total/3 then 'red'
   when @remaining < 2*@total/3 then 'orange'
   else 'green'
end)
看起来像这样,我想这就是你想要的:

EventId  EquipApprovedDate  EquipCalDueDate  ThemeColor  remaining  total
1        2018-04-17         2018-05-31       green       36         44 
2        2018-04-11         2018-04-27       red         2          16 
3        2020-04-20         2020-05-28       green       764        38 
4        2018-04-11         2018-05-15       orange      20         34 
8        2019-04-20         2019-05-31       green       401        41 

您对
equalduedate
equalApprovedDate
使用的数据类型是什么?如果是字符类型,那么日期的格式是什么?在表格中都设置为“日期”。我刚刚更新了我的问题,附带了表格数据和设计供您查看。我会尝试一下,然后再回复您尼克。杜德,您真是天才!它很有魅力。由于我正在处理一个MVC项目,我只是将上面的查询存储在存储过程中,然后在页面加载时调用它。非常感谢你!谢谢很高兴能帮上忙。
EventId  EquipApprovedDate  EquipCalDueDate  ThemeColor  remaining  total
1        2018-04-17         2018-05-31       green       36         44 
2        2018-04-11         2018-04-27       red         2          16 
3        2020-04-20         2020-05-28       green       764        38 
4        2018-04-11         2018-05-15       orange      20         34 
8        2019-04-20         2019-05-31       green       401        41