#sql-server-2008
#sql-server-2008
Вопрос:
Я написал службу окон (C #), которая непрерывно извлекает данные из базы данных Oracle в базу данных Sql Server.
Служба окон запускается в бесконечном цикле и переходит в режим сна на i минуту после одного успешного запуска.
Каждый запуск службы окон я рассматриваю как задание, и для этого задания нет, я передаю 2 входных параметра даты / времени в oracle SP, которые извлекают все записи между 2 прошедшими датами,
Вот логика для передачи дат,
Теперь, в режиме экономии дневного света, мои часы пересылаются на несколько часов вперед, затем я теряю данные за этот период.
Как справиться с этим сценарием сохранения дневного света, я генерирую дату начала / окончания из нижеприведенных SQL-запросов,
DECLARE @startDate VARCHAR(20)
DECLARE @endDate VARCHAR(20)
IF EXISTS(SELECT 1 FROM dbo.tblImportAlertsJob(NOLOCK) WHERE JobStatus = 'Completed')
BEGIN
SELECT @startDate = CONVERT(VARCHAR, DATEADD(ss, 1, InputEndDateTime), 112) ' ' CONVERT(VARCHAR, DATEADD(ss, 1, InputEndDateTime), 8)
FROM dbo.tblImportAlertsJob(NOLOCK)
WHERE JobID = (SELECT MAX(JobID) FROM dbo.tblImportAlertsJob(NOLOCK) WHERE JobStatus = 'Completed')
END
ELSE
BEGIN
SELECT @startDate = CONVERT(VARCHAR, DATEADD(ss, -60, GETDATE()), 112) ' ' CONVERT(VARCHAR, DATEADD(ss, -60, GETDATE()), 8)
END
SET @endDate = CONVERT(VARCHAR, GETDATE(), 112) ' ' CONVERT(VARCHAR, GETDATE(), 8)
INSERT INTO dbo.tblImportAlertsJob(InputStartDateTime, InputEndDateTime) VALUES(@startDate, @endDate)
SELECT CAST(SCOPE_IDENTITY() AS BIGINT) AS 'JobId', @startDate AS 'StartDate', @endDate AS 'EndDate'
Комментарии:
1.
in day light saving mode, I clock is forwarded 2 hour ahead
… Я не знаю ни одной страны, где время меняется на 2 часа во время перехода на летнее время.2. OP отредактирован… Я думаю, к 2.30 часам
3. Простой подход заключается в использовании времени UTC, которое не скачет.