Имитировать текущую дату на экземпляре SQL Server? - PullRequest
7 голосов
/ 23 ноября 2011

Можно ли изменить дату и время для конкретной базы данных на SQL Server?

Это связано с датой / временем операционной системы?

Мы хотим смоделировать будущую дату и время для целей тестирования, т. Е. GETDATE() возвращает дату в будущем.

Это должно быть в полупроизводственной (промежуточной) среде, поэтому, к сожалению, изменение даты / времени ОС нам не подходит.

В идеальном мире мы бы раскручивали виртуальный сервер, но на данный момент это не самый лучший вариант.

Ответы [ 5 ]

3 голосов
/ 23 ноября 2011

Как заявили другие, №

По-настоящему хакерский обходной путь - написать собственную функцию, возвращающую желаемую дату, и вернуть GETDATE (), когда вы закончите тестирование, и вместо этого вызвать эту функцию. Возможно, при этом есть небольшие накладные расходы, но это будет делать то, что вам нужно.

3 голосов
/ 23 ноября 2011

К сожалению, это связано с датой и временем ОС.См. Здесь: http://msdn.microsoft.com/en-us/library/ms188383.aspx

Это значение определяется операционной системой компьютера, на котором работает экземпляр SQL Server.

2 голосов
/ 21 апреля 2015

Другой обходной путь, с которым мне удалось добиться успеха, - это добавить триггер INSTEAD OF к любой таблице, в которую вставляется значение GETDATE (), и изменить ее там, например:

ALTER TRIGGER [dbo].[AccountsPayableReceivable_trg_i] ON [dbo].[AccountsPayableReceivable]
INSTEAD OF INSERT
AS
  SET NOCOUNT ON

  SELECT *
  INTO #tmp_ins_AccountsPayableReceivable
  FROM INSERTED

  UPDATE   #tmp_ins_AccountsPayableReceivable 
  SET    dtPaymentMade = '01-Jan-1900'
  WHERE dtPaymentMade between dateadd(ss, -5, getdate()) and dateadd(ss, +5, getdate())

  INSERT INTO AccountsPayableReceivable
  SELECT *
  from #tmp_ins_AccountsPayableReceivable

(Кстати,здесь есть предложение where, потому что мой тестовый скрипт автоматически генерирует эти триггеры, добавляя обновление для каждого столбца datetime, поэтому я хочу обновлять только те, которые выглядят так, как будто они вставляются, со значением GETDATE ().)

2 голосов
/ 23 ноября 2011

Вы всегда можете использовать это и настроить соответственно:

SELECT getutcdate()

Пожалуйста, смотрите ниже для получения дополнительной информации StackOverflow Вопрос

Но нет способа изменить результаты с GETDATE() без изменения даты сервера.


Добавлено: Вы можете сделать EXEC xp_cmdshell 'DATE 10/10/2011', если хотите ... но это не рекомендуется.
0 голосов
/ 23 ноября 2011

Я полагаю, что вы можете создать пользовательскую функцию, которая будет выполнять вычисления за вас и применить ее.

http://msdn.microsoft.com/en-us/library/ms186755.aspx

Кроме того, его можно использовать в качестве значения по умолчанию для столбца.

Привязать значение столбца по умолчанию к функции в SQL 2005

...