2010-11-17 22 views
0

J'ai besoin d'écrire un UDF qui essaierait de lancer un varchar vers un bigint et retournerait ce bigint ou zéro s'il échouait. Le problème est - je ne peux pas trouver un moyen de faire taire l'erreur de moulage lorsque la chaîne n'est pas un nombre valide. TRY CATCH ne fonctionne pas dans les fonctions et je ne sais pas quoi faire d'autre.Comment faire pour réduire les erreurs à l'intérieur d'un UDF?

Répondre

2

Essayez ceci:

Create Function dbo.Convert2BigInt(@Data VarChar(100)) 
Returns BigInt 
As 
Begin 
    Return(Case When IsNumeric(@Data + '.0e0') = 1 
       Then Convert(BigInt, @Data) 
       Else Convert(BigInt, 0) 
       End) 
End 
+0

Il fonctionne en quelque sorte, dans la façon dont il ne donne pas d'erreur, mais si je passe « 3uytutu » il retourne 3 ce qui est inexact. – Andrey

+0

C'est bizarre. Quand j'appelle la fonction avec la même valeur "3uytutu" elle renvoie 0. J'ai couru: Sélectionnez dbo.Convert2BigInt ('3uytutu') –

+2

Avez-vous veillé à spécifier la taille du paramètre varchar? Dans mon code, j'ai utilisé la valeur 100. Si vous laissez cette option désactivée, SQL Server définit par défaut la taille sur 1 caractère, de sorte que votre valeur de test est tronquée à un caractère, qui est "3" et peut être converti en un grand int . –