Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

CONVERT() vs TRY_CONVERT dans SQL Server :quelle est la différence ?

Vous avez peut-être remarqué que T-SQL inclut à la fois un CONVERT() fonction et un TRY_CONVERT() fonction que vous pouvez utiliser dans SQL Server pour effectuer des conversions entre les types de données. Mais si vous vous demandez quelle est la différence entre ces deux fonctions, lisez la suite !

La différence entre CONVERT() et TRY_CONVERT() est dans la façon dont ils gèrent les types de données qui ne peuvent pas être convertis. L'un génère une erreur, tandis que l'autre renvoie null. Les exemples suivants le démontrent.

La fonction CONVERT()

Tout d'abord, regardons ce que le CONVERT() la fonction le fait. Il convertit un type de données en un autre. Voici un exemple :

SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;

Résultat :

Result     
-----------
Comments: 9

Dans cet exemple, nous convertissons un int valeur à varchar(12) . Et comme la valeur a pu être convertie dans le type et la longueur de données souhaités, cela a parfaitement fonctionné.

Cependant, bien que cela fonctionne parfaitement lorsque la conversion réussit, que se passe-t-il en cas d'échec ?

Lorsque la conversion échoue → Erreur

Modifions un peu le code et voyons ce qui se passe lorsque la conversion échoue :

SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;

Résultat :

Error: Arithmetic overflow error converting numeric to data type varchar.

Nous obtenons une erreur.

La fonction TRY_CONVERT()

Le TRY_CONVERT() est une alternative que nous pouvons utiliser pour empêcher le message d'erreur. Cette fonction effectue la même opération de conversion de données que CONVERT() , cependant, si cette fonction ne peut pas effectuer la conversion, elle renvoie null :

SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;

Résultat :

Result
------
null

Vous pouvez prendre ce résultat et appliquer un code conditionnel pour qu'une chose différente se produise selon que la conversion réussit ou non.

Exemple :

SELECT   
    CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL   
    THEN 'Conversion failed'  
    ELSE 'Conversion succeeded'  
END AS Result;

Résultat :

Result           
-----------------
Conversion failed

Types de données non valides

Une mise en garde avec TRY_CONVERT() est que cela ne fonctionne de cette façon que lors de l'utilisation de types de données valides. Vous obtiendrez donc une erreur si vous fournissez explicitement un type de données non autorisé.

Exemple :

SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;

Résultat :

Error: Type Homer is not a defined system type.