Ошибка «Часовой пояс, предоставленный встроенной функции todatetimeoffset, недействителен». - PullRequest
0 голосов
/ 12 апреля 2019

В 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) >> получить ошибку

Регион и язык ОС не влияют.

Кто-нибудь знает, что может быть причиной этой странной ошибки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...