Bonjour,

est-il possible, lors d'un CAST, de renvoyer NULL si la conversion échoue ?

De telle sorte que...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT CAST('12C45' AS INTEGER)
... renvoie NULL au lieu d'une erreur.

Si ce n'est pas possible, une UDF conviendrait tout à fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
SELECT myIntegerCast('12345') -- renverrait 12345
SELECT myIntegerCast('12C45') -- renverrait NULL
Mais, ne sachant pas comment gérer proprement les erreurs en TRANSACT-SQL, je ne parviens pas à écrire cette UDF.

Merci d'avance pour votre aide.

PS : Je précise que je cherche à réaliser une vraie gestion des erreurs, et non à essayer d'anticiper les différents cas de figure qui feraient que la chaîne ne pourrait pas être convertie en numérique.
En fait, je recherche l'équivalent en TRANSACT-SQL de la fonction que j'ai pour l'instant déportée côté applicatif (c'est-à-dire en VB) :
Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Function fvarChaineConvertieEnLong(pstrChaine As String) As Variant
'Cette fonction tente de convertir en entier long la chaîne de caractères
'passée en paramètre. Si la conversion est impossible, la fonction renvoie NULL.
    On Error GoTo ErreurConversion
    fvarChaineConvertieEnLong = CLng(pstrChaine)
    On Error GoTo 0
 
Exit Function
ErreurConversion:
    fvarChaineConvertieEnLong = Null
 
End Function