Sql 如何在表的每一行上运行相同的查询?(MVC)
我目前有一个名为“Events”的表,其中有“EquipApprovedDate”、“EquipCalDueDate”和“ThemeColor”列。我想根据设备决战日期之前剩余的天数更新主题颜色 绿色=好 橙色=认为可以 红色=临界值 日历上登记的每台设备的总天数将不同。将使用此公式(totaldays=EquipalDueDate-EquipalApprovedDate)进行计算。剩余天数将使用此公式计算(remainingDays=EquicalDueDate-DateTime.Now) 如果剩余天数超过总天数的2/3将被标记为“绿色” 如果剩余天数小于总天数的2/3,但大于总天数的1/3,则标记为“橙色” 如果剩余天数小于总天数的1/3,则标记为“红色” 每次加载页面时,我都希望在表上应用整个过程,特别是在数据库中找到的每一行上。基本上是收集数据并返回每一行。目前,它只在列ThemeColor被更新为每一行的“绿色”时部分运行,无论发生什么情况。什么是正确的SQL查询 我已附上我目前的工作一起为您的看法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) 如
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