以月和周间隔调度存储过程

时间:2012-11-29 15:49:28

标签: c# .net date datetime azure

由于Windows Azure没有SQL代理,因此您必须创建自己的辅助角色才能像SQL代理一样工作,以便安排存储过程的运行。

除了有日期的部分之外,我已经完成了这个部分。这应该是非常逻辑的,但对我来说似乎并非如此。那么我该如何检查今天是本月的第一天还是一周的第一天。

这是我到目前为止所做的:

Trace.WriteLine("SqlWorkerRole entry point called", "Information");

while (true)
{
    DateTime firstDayOfMonth = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 1, 0, 0, 0);
    if (DateTime.UtcNow > firstDayOfMonth)
    {
        Guid? jobId = StartJob("MonthJob");

        if (jobId.HasValue)
        {
            Trace.WriteLine("Working", "Information");
            ExecuteMonthJob();
            StopJob(jobId.Value);
        }
    }
    else
    {
        Thread.Sleep(60000);
    }

    DateTime firstDayOfWeek = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 1, 0, 0, 0);
    if (DateTime.UtcNow > firstDayOfWeek)
    {
        Guid? jobId = StartJob("WeekJob");

        if (jobId.HasValue)
        {
            Trace.WriteLine("Working", "Information");
            ExecuteWeekJob();
            StopJob(jobId.Value);
        }
    }
    else
    {
        Thread.Sleep(60000);
    }
}

我需要这部分的帮助(月的第一天)

DateTime firstDayOfMonth = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 1, 0, 0, 0);
if (DateTime.UtcNow > firstDayOfMonth)

和(一周的第一天)

DateTime firstDayOfWeek = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 1, 0, 0, 0);
if (DateTime.UtcNow > firstDayOfWeek)

2 个答案:

答案 0 :(得分:0)

好吧,您可以选择使用Enzo Cloud Backup Community Edition(免费软件)。它内置了一个调度程序(需要x-small worler角色),您可以安排T-SQL调用。调度程序可以每周执行一次,但此时它并不是每月执行一次;仍然在存储过程本身中添加逻辑以确定您的proc是否在本月运行是微不足道的。

答案 1 :(得分:0)

如果您不想为工作人员角色付费,您还可以考虑使用Cotega,这是一种能够安排execution of stored procedures的服务。

完全披露,我在Cotega服务上工作。