Lorsque vous travaillez avec des valeurs de temps dans SQL Server, il est important de comprendre comment la base de données gère les dates et les heures. Dans certains cas, stocker des valeurs de temps sans date correspondante peut entraîner un comportement inattendu.
Par exemple, supposons que nous ayons une application qui demande aux utilisateurs d’entrer des valeurs de temps au format “8:15 am” sans partie date. Dans MS Access, la date zéro est représentée par le 30/12/1899. Cependant, lorsque nous avons migré l’application vers SQL Server, nous avons remarqué que les valeurs de temps étaient stockées avec une date par défaut du 1/1/1900.
Cette différence est devenue apparente lorsque nous avons commencé à utiliser une procédure stockée SQL pour insérer des enregistrements. Les valeurs de temps dans le client MS Access ont commencé à afficher à la fois la date et l’heure, la date étant affichée comme ‘1/1/1900’.
Pour résoudre ce problème, nous devons forcer la valeur de date zéro correcte dans SQL Server. Dans notre procédure stockée, nous pouvons inclure une variable qui représente la date par défaut d’Access, qui est 1899-12-30. Nous pouvons ensuite concaténer cette variable avec le paramètre de temps lors de l’insertion des enregistrements.
Voici un exemple de la façon dont la déclaration INSERT modifiée apparaîtrait:
DECLARE @strZeroDate CHAR(11)
SET @strZeroDate = '1899-12-30'
INSERT INTO tblBooking (BookID, RoomID, BookDate, TimeStart, TimeEnd)
VALUES (@BookID, @RoomID, @BookDate, @strZeroDate + @TimeStart, @strZeroDate + @TimeEnd)
En réécrivant notre déclaration INSERT de cette manière, nous pouvons nous assurer que l’interface utilisateur d’Access (et l’interface SQL Enterprise Manager) affichera une valeur de temps où, en réalité, un datetime est stocké.
Il est important de noter que cette solution est spécifique à SQL Server et peut ne pas être applicable à d’autres systèmes de base de données. De plus, il est toujours recommandé de tester minutieusement toutes les modifications apportées à votre base de données pour vous assurer qu’elles n’ont pas de conséquences indésirables.
Références:
- Guide du programmeur du moteur de base de données Microsoft Jet
- Annexe A Spécifications, Types de données – Lee Woods, Directeur de l’unité de produit Microsoft Jet
- ACC: La requête avec des critères de temps ne renvoie aucun enregistrement – Microsoft SQL ServerID: Q173097
- Construction d’applications compatibles avec l’an 2000 avec Visual Studio 6.0 et Microsoft Windows DNA – Jerry Brunning, Clarity Consulting, Inc., août 1998
- XL: Le pilote ODBC Access renvoie la date du 30/12/1899 – ID: Q125849