在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和数据库排序规则:SQL_Latin1_General_CP1_CI_AS
该操作系统似乎没有影响力:
操作系统区域和语言设置似乎没有影响。
有人知道是什么原因导致这种奇怪的错误吗?