Wobei [CastleType] in SQL Server als Datentyp "Text" festgelegt ist und die Abfrage lautet:
SELECT *
FROM [Village]
WHERE [CastleType] = 'foo'
Ich bekomme den Fehler:
Die Datentypen TEXT und VARCHAR sind im Operator gleich nicht kompatibel.
Kann ich diesen Datentyp nicht mit einer WHERE-Klausel abfragen?
sql-server
sql-server-2005
tsql
mmcglynn
quelle
quelle
VARCHAR(MAX)
anstelle vonTEXT
- dieser Datentyp ist veraltetAntworten:
Sie können
LIKE
anstelle von verwenden=
. Ohne Platzhalter hat dies den gleichen Effekt.text
ist veraltet. Das Wechseln zuvarchar(max)
ist einfacher zu bearbeiten.Wie groß sind die Daten wahrscheinlich? Wenn Sie Gleichheitsvergleiche durchführen möchten, sollten Sie diese Spalte idealerweise indizieren. Dies ist nicht möglich, wenn Sie die Spalte als breiter als 900 Byte deklarieren. Sie können jedoch eine berechnete Spalte
checksum
oderhash
Spalte hinzufügen , mit der diese Art von Abfrage beschleunigt werden kann.quelle
Bitte versuchen Sie dies
quelle
Sie können nicht
text
mit dem=
Operator vergleichen, sondern müssen stattdessen eine der hier aufgeführten Vergleichsfunktionen verwenden . Beachten Sie auch das große Warnfeld oben auf der Seite, es ist wichtig.quelle
Wenn Sie den Datentyp in der Tabelle selbst nicht ändern können, um varchar (max) zu verwenden, ändern Sie Ihre Abfrage wie folgt:
quelle
Das steht nicht in der Fehlermeldung. Es heißt, dass Sie den
=
Operator nicht verwenden können. Versuchen Sie es zum BeispielLIKE 'foo'
.quelle
Col IN ('foo', 'bar')
ist im Grunde das gleiche wieCol = 'foo' or Col = 'bar'
und wird das gleiche Problem haben.Eine andere Option wäre:
quelle
like 'foo'
dass dies zu besseren Kardinalitätsschätzungen führen könnte als dieser Ansatz, bin mir aber nicht 100% sicher.Dies funktioniert in MSSQL und MySQL:
quelle