👉 Utiliser TRY_CONVERT par défaut,
👉 CONVERT seulement quand on veut volontairement une erreur.
Pourquoi TRY_CONVERT est souvent le meilleur choix
TRY_CONVERT :
- Ne plante pas la requĂŞte
- Retourne NULL si la conversion échoue
- Est idéal pour :
- Données sales / hétérogènes
- Imports
- Audits
- Requêtes en prod où on veut éviter un abort brutal
SELECT TRY_CONVERT(int, ‘123’); — 123
SELECT TRY_CONVERT(int, ‘ABC’); — NULL (pas d’erreur)
Quand CONVERT est préférable
CONVERT :
- Lève une erreur si la conversion échoue
- Est utile quand :
- Une erreur = anomalie bloquante
- Tu veux détecter immédiatement une donnée invalide
- Tu es dans un process contrôlé (ETL strict, règle métier forte)
SELECT CONVERT(int, ‘ABC’);
— Msg 245, Conversion failed…
👉 C’est une forme de fail fast assumée.
Performances : mythe vs réalité
- TRY_CONVERT est légèrement plus cher que CONVERT
- Mais :
- la différence est négligeable face à un scan ou un join
- beaucoup moins chère qu’une requête qui plante
⚠️ Attention surtout au SARGability (cf. article):
— Mauvais (index inutilisable)
WHERE TRY_CONVERT(date, ColVarchar) = ‘2026-01-01’
👉 Pré-convertis en amont si possible (staging, computed column persistée).
Bonnes pratiques concrètes
✅ Données externes / incertaines → TRY_CONVERT
✅ Audit / diagnostic / requêtes robustes → TRY_CONVERT
✅ Règle métier stricte / erreur attendue → CONVERT
❌ TRY_CONVERT dans un WHERE