处理多个时区的日光节省.- MS SQL Server

时间:2015-05-31 16:42:23

标签: sql sql-server scheduled-tasks

我的任务是根据不同的时区处理导入作业到SQL服务器。文件从多个地区到达Windows Server,例如巴西,新加坡,澳大利亚,美国各地以及欧洲。

每个文件将由多个存储过程导入到SQL表中。每个存储过程需要根据与文件原点相关的时区基于预定时间执行。

由于每个地区在一年中的不同时间调整白天节省光,因此在规定时间内工作证明是棘手的。例如,英国将它的时钟向前移动以节省一天的时间,巴西可能不会将他们的时间再推迟3周(请不要引用我的话,我只是将这些时间用于示例目的)。

我的问题是;如何根据多个时区安排作业在同一台服务器上运行?

我可以看到,如果我在SQL中创建一个时区查找表,显示一年中每个时段的每个时区之间的关系,这可能是可能的,但这看起来非常麻烦,并且还需要相当长的时间才能完成填充表格。

Windows调度程序似乎使用本地服务器的日期/时间设置,虽然它确实调整了夏令时,但这仅适用于一个区域。有没有人必须在SQL Server中处理此问题?或者,任何人都可以推荐SQL Server外部的调度工具,它可以根据不同的时区启动任务吗?

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

根据定义,您将无法透明且轻松地配置单个SQL Server实例以在不同时区中运行多组任务(实例为单个,所有任务集将位于同一时区)。

但是,您可以使用您喜欢的任何语言编写自己的脚本(例如,MSSQL的CLR .NET扩展或只是简单的Transact-SQL),它配置为以下内容:

  1. 迭代您希望运行任务的每个区域的列表
  2. 将区域的时间转换为服务器时间并设置要执行的操作(例如,通过sp_schedule)。
  3. 重复下一个时期。
  4. 此任务当然应该在+12 UTC运行,因此肯定会在该日期首先执行(因为时间在日本很方便)。

    无论夏令时,时区更新等等,以这种方式实施都将非常清晰可靠。只需确保合作伙伴时区的配置保持最新。