В 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 с пакетом обновления 1
- SQL Server 2008 R2 с пакетом обновления 2
- 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 Datacenter (dev) >> получить ошибку
Регион и язык ОС не влияют.
Кто-нибудь знает, что может быть причиной этой странной ошибки?