Où [CastleType] est défini comme type de données "texte" dans SQL Server et la requête est:
SELECT *
FROM [Village]
WHERE [CastleType] = 'foo'
J'obtiens l'erreur:
Les types de données TEXT et VARCHAR sont incompatibles dans l'opérateur égal à.
Puis-je ne pas interroger ce type de données avec une clause WHERE?
sql-server
sql-server-2005
tsql
mmcglynn
la source
la source
VARCHAR(MAX)
place deTEXT
- ce type de données est obsolèteRéponses:
Vous pouvez utiliser à la
LIKE
place de=
. Sans aucun joker, cela aura le même effet.text
est obsolète. Changer envarchar(max)
sera plus facile à utiliser.Quelle est également la taille probable des données? Si vous comptez faire des comparaisons d'égalité, vous voudrez idéalement indexer cette colonne. Cela n'est pas possible si vous déclarez la colonne comme étant plus large que 900 octets, mais vous pouvez ajouter une colonne calculée
checksum
ouhash
qui peut être utilisée pour accélérer ce type de requête.la source
Veuillez essayer ceci
la source
Vous ne pouvez pas comparer
text
avec l'=
opérateur, mais à la place, vous devez utiliser l'une des fonctions de comparaison répertoriées ici . Notez également la grande boîte d'avertissement en haut de la page, c'est important.la source
Si vous ne pouvez pas modifier le type de données sur la table elle-même pour utiliser varchar (max), modifiez votre requête comme suit:
la source
Ce n'est pas ce que dit le message d'erreur. Il dit que vous ne pouvez pas utiliser l'
=
opérateur. Essayez par exempleLIKE 'foo'
.la source
Col IN ('foo', 'bar')
est fondamentalement le mêmeCol = 'foo' or Col = 'bar'
et aura le même problème.Une autre option serait:
la source
like 'foo'
pourrait donner de meilleures estimations de cardinalité que cette approche, mais je ne suis pas sûr à 100%.Cela fonctionne dans MSSQL et MySQL:
la source