2

我有一份工作需要在午夜运行 7 个时区。有没有办法在 Windows Server 2008 R2 上的 SQL 2008 R2 中创建一个单一的计划来执行此操作,这将告诉 proc 要处理哪个时区?

4

3 回答 3

2

如果您有一个 SQL 服务器,则必须设置 7 个单独的计划调用 - 每个时区一个,在该特定时区的午夜运行。这是这样做的最佳方式。
我突然想到 - 你的意思是你想在每个时区的午夜运行(正如我假设的那样) - 即在 7 个不同的时间,或者在当前时区的午夜,但一次处理 7 个不同时区的数据(在这种情况下不同时区处理有什么区别)?

于 2012-09-18T13:44:22.373 回答
2

SQL Server 代理不支持时区。您可以通过计算得出程序中的时区:

SELECT DATEDIFF(MINUTE, GETDATE(), GETUTCDATE());

因此,您可以将您的计划设置为每小时运行一次,然后在该过程中,检查上述结果是否属于您的 7 个时区之一。如果没有,请返回。

您可以将 7 个时区存储在一个表中,这样当您添加第 8 个时区时,您不必更改程序。

根据您将来可能支持的时区,您可能还需要更细化 - 有些不是 UTC 小时数的整数。例如,纽芬兰是半小时:比 UTC 晚 2.5 或 3.5 小时,具体取决于夏令时。

于 2012-09-18T13:47:01.947 回答
0

只需安排您的工作每小时运行一次存储过程。并在存储过程中检查DATEPART(hh, GETUTCDATE())UTC 所需时区的固定午夜列表,例如时区 +1 检查是否 DATEPART(hh, GETUTCDATE())=(24-1)为 +2 检查DATEPART(hh, GETUTCDATE())=(24-2)

于 2012-09-18T13:54:56.957 回答