如何在C#中使用单个查询来实现这一点?

如何在C#中使用单个查询来实现这一点?,c#,sql,C#,Sql,如果使用update命令从数据库中记录的日期开始,某个日期早于今天,我想使用被动查询。如何使用C#中的单个查询来实现这一点 柱状物:塔里(nvarchar),硬粒(nvarchar) 比如, if tarih<Datetime.Today.Date is set Durum='PASİF' 看看函数 UPDATE Abonelikler SET Durum='PASIF' WHERE DATEDIFF(DD, CONVERT(datetime, BitTarihi), GET

如果使用update命令从数据库中记录的日期开始,某个日期早于今天,我想使用被动查询。如何使用C#中的单个查询来实现这一点

柱状物:塔里(nvarchar),硬粒(nvarchar)

比如,

if tarih<Datetime.Today.Date is set Durum='PASİF' 
看看函数

UPDATE Abonelikler SET Durum='PASIF' 
    WHERE DATEDIFF(DD, CONVERT(datetime, BitTarihi), GETDATE())>0

另外,请不要使用SQL语句的串联,请使用参数。它更安全,而且有时语句与参数的串联会妨碍服务器端语句优化。

与其更新记录,不如在查询级别决定状态?因为你每天都检查这个,所以会有很多不必要的更新

SELECT BitTarihi, CASE WHEN DATEDIFF(DAY, BitTarihi, GetDate()) = 0 THEN 'AKTIF' ELSE 'PASIF' END DURUM FROM Abonelikler 

这样您就不必更新记录。

DateDiff返回日期边界差异而不是全天差异吗?@Tao,是的,它“返回指定的开始日期和结束日期之间跨越的指定日期部分边界的计数(有符号整数)”。我猜
BitTarihi
不包含时间部分(或者
if(fark.TotalDays>0)
无法正常工作,因为
TimeSpan.TotalDays
属性的分数性质)——在这种情况下,DATEDIFF返回的正是我们想要的,不是吗?是的,但上面的原始psuedo代码也会进行日期边界检查,这就是您要求的。@Dmitry-我不清楚OP是否要更新“超过24小时的记录”(这正是上面的C#代码所做的,您可以使用DateAdd来做),或者“昨天或更早的记录”,这是您的查询所做的。我只是想提醒大家注意,您的代码与OP的代码不一样。@samjudson-您的评论是针对谁的?
SELECT BitTarihi, CASE WHEN DATEDIFF(DAY, BitTarihi, GetDate()) = 0 THEN 'AKTIF' ELSE 'PASIF' END DURUM FROM Abonelikler