Tout d'abord, puisque vous utilisez SQL Server 2005, vous devez mettre votre code qui pourrait échouer dans BEGIN TRY.....END TRY BEGIN CATCH....END CATCH
blocs - blocs try/catch pour T-SQL !
Deuxièmement, pour toute manipulation de date, je ferais toujours utilisez le format ISO-8601 qui fonctionnera quel que soit le format de date actuel défini dans SQL Server.
Le format ISO-8601 est YYYYMMDD
pour les dates uniquement, ou YYYY-MM-DDTHH:MM:SS
pour la date avec l'heure - donc j'écrirais votre code comme suit :
BEGIN TRY
SET @Source='07152009'
SET @Temp = RIGHT(@Source, 4) + -- YYYY
LEFT(@Source, 2) + -- MM
SUBSTRING(@Source, 3, 2) -- DD
IF ISDATE(@Temp)!=1
BEGIN
RAISERROR('ERROR, invalid date',16,1)
END
SET @Destination = CAST(@Temp AS DATETIME)
END TRY
BEGIN CATCH
-- handle error if something bombs out
END CATCH
Ne vous fiez pas à la définition d'un format de date particulier !! Envoyez-moi votre code et je l'essayerai sur un système suisse-allemand - je garantis presque qu'il se cassera si vous supposez aveuglément "en-US" et donc "mm/jj/aaaa" - ce n'est pas le même décor partout sur cette planète.
Malheureusement, SQL Server est plutôt faible pour gérer les dates - peut-être que cela pourrait être un point d'extension où l'utilisation d'un assembly CLR dans SQL Server aurait du sens, pour exploiter les fonctions de gestion des dates beaucoup plus riches dans .NET ??
Marc
PS:semble que le format ISO-8601, je savais que AAAA-MM-JJ ne fonctionne pas toujours dans SQL Server - contrairement à ce que Books Online semble prêcher. Utilisez plutôt AAAAMMJJ ou AAAA-MM-JJTHH:MM:SS.
Merci, gbn !