Erreur dans un PS en exécution programmée mais OK en manuel
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 :
Citation:
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]
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 :
Code:
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()) |
La fonction FN_DATETIME_AS_DATE est toute simple et déterministe :
Code:
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.