Sql server 在SQL Server实例上模拟当前日期?

Sql server 在SQL Server实例上模拟当前日期?,sql-server,getdate,Sql Server,Getdate,是否可以更改SQL Server上特定数据库的日期时间 它是否与操作系统的日期/时间相关 我们希望为测试目的模拟未来的日期时间,即GETDATE()返回未来的日期 它必须处于半生产(暂存)环境中,因此不幸的是,更改操作系统日期/时间不是我们的选择 在理想情况下,我们会启动一个虚拟服务器,但目前还不是一个真正的选项。不幸的是,它与操作系统的日期和时间有关。请看这里: 此值是从计算机上的操作系统导出的 正在运行的SQL Server实例 您可以始终使用此选项并进行相应调整: SELECT getut

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

它是否与操作系统的日期/时间相关

我们希望为测试目的模拟未来的日期时间,即
GETDATE()
返回未来的日期

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


在理想情况下,我们会启动一个虚拟服务器,但目前还不是一个真正的选项。

不幸的是,它与操作系统的日期和时间有关。请看这里:

此值是从计算机上的操作系统导出的 正在运行的SQL Server实例


您可以始终使用此选项并进行相应调整:

SELECT getutcdate()
有关更多信息,请参见下文

但是,如果不更改服务器的日期,就无法从
GETDATE()
更改结果。
添加:
如果您愿意,可以执行EXEC xp\u cmdshell“日期为2011年10月10日”。。。但不建议这样做。

如其他人所述,不建议这样做


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

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

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


另一个我成功使用的解决方法是,在插入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()值更新那些看起来像是插入的触发器。)

您好,感谢您的响应,但不幸的是,这不是为了调整对GETDATE()的特定调用,而是所有对GETDATE()的调用,以便我们可以测试现有代码。为了使测试更加健壮,我们尝试不更改代码,而是调整环境。无论如何,谢谢。抱歉,您的SQL问题似乎是SOL.)xp_cmdshell的有趣之处,谢谢。我不认为在我们的登台环境中启用了它,但我会记住cmd行,谢谢+1来自我:-)谢谢Shark,+1来自我。我希望能找到一些神奇的解决办法…:-)我想知道是否有任何硬代码powershell脚本用于更改特定exe/线程的日期时间-尽管这听起来几乎不可能/v危险!看起来我必须进一步研究虚拟服务器选项。。。。。EC2时间到了,我想:-)@AlexKey没问题,很乐意帮忙。Powershell()有一个
Set Date
cmdlet,但它会更改您的操作系统日期和时间。有趣的一点是(+1),让我想到是否有方法重写GETDATE()。。。看起来我可能可以使用完整的语法dbo.GETDATE(),这确实意味着更改我的代码。。。但也不会太糟糕,不过我在2000兼容模式下运行的是2005 DB,所以我可能会就确定性/非确定性函数等问题自找麻烦。出于对所有神圣事物的热爱,请不要调用新函数getdate。我想不出一种更容易产生混淆的方法,而不是出于您自己的目的而选择内置函数的名称。如果您已经在更改代码库以适应新函数,请明确它正在做其他事情。见鬼,MYGETDATE会更好。谢谢Chris,我试图避免更改代码,但与Doozer的回答类似,这可能是一个来回切换的选项。谢谢你的意见。好主意,我现在在一个不同的世界,所以我不会去使用它,但我喜欢这个理论+1.可能是@loudmumer的复制品我想你是对的,他们似乎是同一个问题,我当时没有遇到这个问题。这两个问题(非常古老)都吸引了宝贵的见解,是否有可能将它们合并?事实上,这两个问题都有很好的答案。合并它们是可能的,但波斯特说只有版主才能这样做。也许你可以标记它以引起版主的注意?