Bonjour,
Je vous soumets le petit problème suivant, qui doit être d'une simplicité désarmante, mais que je ne suis pas foutu de solutionner et qui commence à m'énerve puissamment.
Donc, j'ai développé une procédure stockée sous SQL Server 2000 qui, testée abondamment de façon manuelle (EXEC ...) dans toutes les configurations possibles, fonctionne parfaitement.
Sauf que, lorsque je l'ai mise en production dans l'ordonnanceur de travaux (exécution vers les 02h00), celle-ci s'arrête sur l'erreur suivante :
Cette procédure dispose d'un mode debug qui m'a permis d'identifier la "ligne" générant cette erreur. Il s'agit d'une requête d'insertion toute simple mais assez longue comportant quelques champs calculés que j'ai résumés dans le code suivant :Msg 242, Sev 16 : La conversion d'un type de données CHAR en type DATETIME a donné une valeur hors des limites des valeurs de date et d'heure. [SQLSTATE 22007]
La fonction FN_DATETIME_AS_DATE est toute simple et déterministe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CONVERT(VARCHAR, GETDATE(), 120) DBO.FN_DATETIME_AS_DATE( GETDATE()) CAST(SUBSTRING(CONVERT(VARCHAR, GETDATE(), 112), 1,6) AS INT) DATEPART(week, GETDATE())
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CREATE FUNCTION FN_DATETIME_AS_DATE (@DT DATETIME) RETURNS DATETIME AS BEGIN RETURN CAST(FLOOR(CAST(@DT AS FLOAT)) AS DATETIME) END
Le problème vient du fait que d'une part je ne vois aucune conversion d'un type CHAR vers un DATETIME dans ce code (à part la fonction) et d'autre part que je suis incapable de reproduire cette erreur en exécution manuelle (par contre elle survient systématiquement en exécution programmée, quelque soit l'horaire d'exécution).
Je subodore bien que le problème vient de cette fonction mais je ne vois pas pourquoi en exécution manuelle, elle fonctionne correctement mais entraîne une erreur en exécution programmée.
Merci d'avance.
Partager