Où [CastleType] est défini comme type de données "text" dans SQL Server et la requête est la suivante:
SELECT *
FROM [Village]
WHERE [CastleType] = 'foo'
Je reçois l'erreur:
Les types de données ([~ # ~] text [~ # ~] et VARCHAR sont incompatibles dans l'opérateur égal à.
Puis-je interroger ce type de données avec une clause WHERE?
Vous pouvez utiliser LIKE
au lieu de =
. Sans aucun caractère générique, cela aura le même effet.
DECLARE @Village TABLE
(CastleType TEXT)
INSERT INTO @Village
VALUES
(
'foo'
)
SELECT *
FROM @Village
WHERE [CastleType] LIKE 'foo'
text
est obsolète. Passer à varchar(max)
sera plus facile à utiliser.
Aussi, quelle est la taille probable des données? Si vous voulez faire des comparaisons d’égalité, vous voudrez idéalement indexer cette colonne. Cela n'est pas possible si vous déclarez que la colonne dépasse 900 octets, mais vous pouvez ajouter une colonne calculée checksum
ou hash
pouvant être utilisée pour accélérer ce type de requête.
S'il vous plaît essayer ceci
SELECT *
FROM [Village]
WHERE CONVERT(VARCHAR, CastleType) = 'foo'
Vous ne pouvez pas comparer avec text
avec le =
_ opérateur, mais doit 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.
Si vous ne pouvez pas changer le type de données sur la table pour utiliser varchar (max), modifiez votre requête en ceci:
SELECT *
FROM [Village]
WHERE CONVERT(VARCHAR(MAX), [CastleType]) = 'foo'
Ce n'est pas ce que dit le message d'erreur. Il dit que vous ne pouvez pas utiliser le =
_ opérateur. Essayez par exemple LIKE 'foo'
.
Une autre option serait:
SELECT * FROM [Village] WHERE PATINDEX('foo', [CastleType]) <> 0
Cela fonctionne dans MSSQL et MySQL:
SELECT *
FROM Village
WHERE CastleType LIKE '%foo%';