错误“提供给内置函数todatetimeoffset的时区无效。”

时间:2019-04-12 15:04:57

标签: sql-server sql-server-2008-r2

在SQL Server 2008 R2中,函数TODATETIMEOFFSET显示以下错误:

  

提供给内置函数todatetimeoffset的时区无效。

在某些SQL Server 2008 R2安装中,该功能有效(相同的数据库和相同的代码)

这是我正在使用的代码,它是存储过程的一部分:

-- table to contain every office timezone offset in minutes
DECLARE @mOfficeOffsetsT TABLE 
                         (
                             [OfficeCode] VARCHAR(20) COLLATE SQL_Latin1_General_CP1_CI_AS primary key,
                             [OffsetMinutes] INT
                         );    

 INSERT INTO @mOfficeOffsetsT ([OfficeCode], [OffsetMinutes])
     SELECT         
         [OfficeCode], [OffsetMinutes]    
     FROM
         [dbo].[GetOfficeOffsets]();  -- GetOfficeOffsets function get all offices offsets in minutes, for example: -180

DECLARE @mNow DATETIMEOFFSET;
SET @mNow = SYSDATETIMEOFFSET(); 

SELECT           
    NTF.[NotificationId], 
    NTF.[ScheduleDate],    
    NTF.[AppointmentId]     
FROM
    [Notification] NTF    
INNER JOIN
    [Appointment] AP ON NTF.[AppointmentId] = AP.[AppointmentId]  
INNER JOIN
    @mOfficeOffsetsT OO ON AP.[OfficeCode] = OO.[OfficeCode]      
WHERE           
    TODATETIMEOFFSET(AP.[AppointmentDate], OO.[OffsetMinutes]) <= @mNow;

通知表列:

[NotificationId] [int] IDENTITY (1, 1) NOT NULL,
[ScheduleDate] [datetime] NOT NULL,
[AppointmentId] [int] NOT NULL, 
.. other columns ..

约会表列:

[AppointmentId] [int] IDENTITY (1, 1) NOT NULL ,
[OfficeCode] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[AppointmentDate] [datetime] NOT NULL ,
.. other columns ..

我的函数“ GetOfficeOffsets”似乎不是问题所在,因为如果我对@mOfficeOffsetsT表行进行硬编码,则错误仍然存​​在。

表中的数据似乎还可以。

我在以下位置重现了错误:

  • SQL Server 2008 R2 RTM
  • SQL Server 2008 R2 SP1
    • SQL Server 2008 R2 SP2
    • SQL Server 2008 R2 SP3

我正在使用的SQL Server和数据库排序规则:SQL_Latin1_General_CP1_CI_AS

该操作系统似乎没有影响力:

  • Windows Server 2008 R2 Enterprise(生产)>>得到错误
  • Windows Server 2008 R2 Standard(测试)>>效果很好
  • Windows Server 2008 R2 Enterprise(dev)>>效果很好
  • Windows Server 2008 R2数据中心(dev)>>收到错误

操作系统区域和语言设置似乎没有影响。

有人知道是什么原因导致这种奇怪的错误吗?

0 个答案:

没有答案