60 votes

Quelle est la bonne manière de comparer une colonne NTEXT avec une valeur constante ?

Si j'utilise quelque chose comme

[ntext2] <> '1,032.5',

J'obtiens cette erreur:

Les types de données ntext et varchar sont incompatibles dans l'opérateur de non-égalité.

La meilleure solution possible serait que la comparaison soit implémentée de la même manière pour tout type de colonne. (l'opérateur <> est applicable pour à la fois NVARCHAR et INT).

68voto

Guffa Points 308133

Le type de données ntext est obsolète au profit du type de données nvarchar(max). Si vous pouvez changer le type de données dans la table, ce serait la meilleure solution. Ensuite, il n'y a aucun problème à le comparer à un littéral de varchar.

Sinon, vous devriez convertir la valeur avant de la comparer :

cast([ntext2] as nvarchar(max)) <> '1,032.5'

Vous pourriez également envisager d'utiliser un littéral nvarchar, qui résout certains problèmes similaires de type de données :

cast([ntext2] as nvarchar(max)) <> N'1,032.5'

12voto

kbrimington Points 14081

Si vous préférez ne pas effectuer de requête, vous pouvez vous en sortir dans certains cas en utilisant LIKE or PATINDEX, comme démontré dans ce fil de discussion MSDN : http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/6bd4c661-ea0b-435f-af78-097e61549d41

L'expression LIKE, sans jokers, serait (dans ce cas) grossièrement équivalente à un test d'égalité.

Dans ce cas, l'expression serait :

[ntext2] NOT LIKE '1,032.5'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X