est-il possible de tromper SQL Server de retourner une date différente sur getDate () code> sans changer la date de la machine?
Ce serait génial, car nous avons une base de données avec des données anciennes et j'essaie de tester certaines requêtes qui utilisent getDate ().
Je peux changer la date de ma machine mais cela apporte d'autres problèmes avec d'autres applications ...
Des conseils?
Merci! P>
4 Réponses :
Vous pouvez toujours envelopper getDate () code> dans une fonction personnalisée et utilisez-le partout, bien que ce ne soit pas une solution optimale. P>
comment peux-tu faire ça? Même si vous créez un UDF, ce serait dbo.getdate () code>
@Km: Vous modifierez la mise en œuvre de la fonction afin que vous puissiez le modifier partout en modifiant un endroit. @Klausbyskov: Si je ne me trompe pas, vous ne pouvez pas avoir une fonction non déterministe comme GetDate dans un UDF.
KM est correct, il ne serait alors que utilisé uniquement en spécifiant Dbo.getDate (), il ne remplace pas / remplace la fonction intégrée.
@JOSH: Vous ne pouvez pas appeler un UDF sans préfixe de schéma, comme DBO B> .GETDATE. Et vous pouvez avoir des fonctions non déterministes dans un UDF: créer une fonction dbo.getdate () renvoie DateTime comme commencement Retour (Sélectionnez GetDate ()) Fin CODE> Compile Fine
@Josh, comment allez-vous modifier la mise en œuvre de la fonction code>? N'est-ce pas
getDate code> une partie de la DLL ou EXE à l'intérieur de SQL Server? Et je ne pense pas que SQL Server est une source open source ;-)
@Andomar: Je sais que SQL Server 2000 n'a pas pris en charge appelant une fonction non déterministe de. En ce qui concerne les documents de 2008, je ne vois pas cela énumérés comme une limitation, je suppose donc qu'ils l'ont changé. @TAveryoneelse: Vous pouvez écrire une fonction appelée getmydate () que vous mettriez ensuite à jour votre code pour utiliser getmydate (), maintenant lorsque vous souhaitez le calculer, vous pouvez échanger le corps de GetMyDate ()
Selon le Documentation pour GetDate () : P >
Cette valeur est dérivée de la Système d'exploitation de l'ordinateur sur dont l'instance de SQL Server est courir. p> blockQuote>
Puisqu'il est dérivé du système d'exploitation, je ne pense pas que vous puissiez le changer séparément. P>
Non, il n'y a pas grand chose que vous pouvez faire autre chose que quelque chose comme ceci:
SELECT DATEADD(dd, -7, GETDATE())
Eh bien, et comment cela aidera à courir de nombreux scripts avec getDate () sans les changer, pour les tester contre les données dans le passé?
Le plus proche que je puisse imaginer, étant donné la réponse ci-dessous consiste à créer un serveur NTP personnalisé qui alimente la date d'heure souhaitée. Ensuite, déclenchez une synchronisation NTP juste avant vos tests. Pas parfait, mais conviendrait quelques besoins.