7

是否可以更改 SQL Server 上特定数据库的日期时间?

它与操作系统的日期/时间有关吗?

我们希望模拟未来的日期时间以进行测试,即GETDATE()返回未来的日期。

它必须在半生产(暂存)环境中,因此不幸的是,更改操作系统日期/时间不是我们的选择。

在一个理想的世界里,我们会启动一个虚拟服务器,但目前也不是一个真正的选择。

4

5 回答 5

3

不幸的是,它与操作系统的日期和时间有关。见这里:http: //msdn.microsoft.com/en-us/library/ms188383.aspx

此值源自运行 SQL Server 实例的计算机的操作系统。

于 2011-11-23T17:34:52.900 回答
3

正如其他人所说,不。

一个非常棘手的解决方法是编写自己的函数来返回您想要的日期,并在您完成测试时让它返回 GETDATE(),然后调用该函数。这样做可能会有一些轻微的开销,但它会做你需要的。

于 2011-11-23T17:38:02.587 回答
2

您始终可以使用它并进行相应调整:

SELECT getutcdate()

请参阅下面的更多信息 StackOverflow 问题

但是,如果GETDATE()不更改服务器的日期,就无法更改结果。


补充:如果你愿意, 你可以这样做EXEC xp_cmdshell 'DATE 10/10/2011'......但不建议这样做。

于 2011-11-23T17:35:11.507 回答
2

我取得了一些成功的另一个解决方法是向任何插入 GETDATE() 值的表添加一个 INSTEAD OF 触发器并在那里修改它,例如:

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() 值插入的那些。)

于 2015-04-21T16:59:01.247 回答
0

我相信您可以创建一个用户函数来为您进行计算并应用它。

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

此外,它可以用作列的默认值。

将列默认值绑定到 SQL 2005 中的函数

于 2011-11-23T17:39:10.037 回答