Considérez l'extrait Sql suivant:
declare @param as int set @param=1 select case when @param=1 then '987' else '' end as Value1, case when @param=2 then 987 else '' end as Value2, case when @param<>2 then '' else 987 end as Value3
Je m'attendrais à get 1 ligne avec 3 champs: La string 987 et 2 strings vides mais j'obtiens le résultat suivant:
Pouvez-vous m'expliquer pourquoi j'ai une valeur de 0? Je sais que c'est parce que la colonne est interprétée comme un type de données entier mais pas sûr de la raison.
Au moment d'écrire la question, j'ai trouvé la réponse:
Ce comportement est dû à la priorité de type de données
Lorsqu'un opérateur combine deux expressions de types de données différents, les règles de priorité de type de données spécifient que le type de données de priorité inférieure est converti en type de données avec la priorité la plus élevée. Si la conversion n'est pas une conversion implicite prise en charge, une erreur est renvoyée. Lorsque les deux expressions d'opérande ont le même type de données, le résultat de l'opération a ce type de données.
pour plus d'informations