是否可以更改SQL Server上特定数据库的日期时间?
是否与操作系统的日期/时间相关?
我们希望模拟未来的日期时间以进行测试,即GETDATE()
将来会返回日期。
它必须处于半生产(临时)环境中,所以不幸的是,更改操作系统日期/时间对我们来说不是一个选择。
在一个理想的世界中,我们会启动一个虚拟服务器,但目前还不是一个真正的选择。
答案 0 :(得分:3)
不幸的是,它与操作系统的日期和时间有关。见这里:http://msdn.microsoft.com/en-us/library/ms188383.aspx
此值源自计算机的操作系统 SQL Server实例正在运行。
答案 1 :(得分:3)
正如其他人所说,没有。
一个非常糟糕的解决方法,就是编写自己的函数来返回所需的日期,并在完成测试后返回GETDATE()并调用该函数。这样做可能会有一些轻微的开销,但它会做你需要的。
答案 2 :(得分:2)
您可以随时使用此功能并进行相应调整:
SELECT getutcdate()
请参阅以下内容以获取更多信息 StackOverflow Question
但是在没有更改服务器日期的情况下,无法更改GETDATE()
的结果。
EXEC xp_cmdshell 'DATE 10/10/2011'
但是不建议。
答案 3 :(得分:2)
我取得了一些成功的另一种解决方法是将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()值插入的那些。)< / p>
答案 4 :(得分:0)