Simuler la date actuelle sur une instance SQL Server?

Est-il possible de modifier le datetime pour une database particulière sur SQL Server?

Est-ce lié à la date / heure du operating system?

Nous souhaitons simuler un datetime futur à des fins de test, c'est-à-dire que GETDATE() renvoie une date dans le futur.

Cela doit se faire dans un environnement de semi-production (mise en scène) donc, malheureusement, changer la date et l'heure du operating system n'est pas une option pour nous.

Dans un monde idéal, nous créerions un server virtuel, mais pas vraiment une option pour le moment.

Comme indiqué, par d'autres, No.

Une solution de contournement vraiment hacky, serait d'écrire votre propre fonction pour returnner la date que vous voulez et l'avoir renvoyer GETDATE () lorsque vous avez fini de tester, et appelez cette fonction à la place. Il y a probablement de légers frais généraux à faire, mais ça va faire ce dont vous avez besoin.

Malheureusement, il est lié à la date et l'heure de l'OS. Voir ici: http://msdn.microsoft.com/en-us/library/ms188383.aspx

Cette valeur est dérivée du operating system de l'ordinateur sur lequel l'instance de SQL Server est en cours d'exécution.

Vous pouvez toujours utiliser ceci et ajuster en conséquence:

 SELECT getutcdate() 

S'il vous plaît voir ci-dessous pour plus d'informations StackOverflow Question

Mais il n'y a aucun moyen de changer les résultats d'un GETDATE() sans changer la date du server.


Ajouté: Vous pouvez faire une EXEC xp_cmdshell 'DATE 10/10/2011' si vous le souhaitez … mais ce n'est pas conseillé.

Une autre solution de contournement avec laquelle j'ai eu du succès consiste à append un triggersur INSTEAD OF à n'importe quelle table où une valeur GETDATE () est insérée et à la modifier, par exemple:

 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 

(Incidemment, la clause where est là parce que mon script de test génère automatiquement ces triggersurs, en ajoutant une mise à jour pour chaque colonne datetime, donc je veux seulement mettre à jour ceux qui semblent être insérés avec une valeur GETDATE ().

Je crois que vous pouvez créer une fonction user qui ferait le calcul pour vous et l'appliquer.

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

En outre, il peut être utilisé comme valeur par défaut pour une colonne.

Lier une valeur par défaut de colonne à une fonction dans SQL 2005