Onde [CastleType] é definido como tipo de dados "texto" no SQL Server e a consulta é:
SELECT *
FROM [Village]
WHERE [CastleType] = 'foo'
Recebo o erro:
Os tipos de dados TEXT e VARCHAR são incompatíveis no operador igual a.
Não posso consultar esse tipo de dados com uma cláusula WHERE?
sql-server
sql-server-2005
tsql
mmcglynn
fonte
fonte
VARCHAR(MAX)
vez deTEXT
- esse tipo de dados está obsoletoRespostas:
Você pode usar em
LIKE
vez de=
. Sem qualquer caractere curinga, isso terá o mesmo efeito.text
está obsoleto. Mudar paravarchar(max)
será mais fácil de trabalhar.Além disso, qual é o tamanho provável dos dados? Se você for fazer comparações de igualdade, o ideal é indexar esta coluna. Isso não é possível se você declarar a coluna como algo maior que 900 bytes, embora você possa adicionar uma coluna computada
checksum
ouhash
que pode ser usada para acelerar esse tipo de consulta.fonte
Por favor tente isto
fonte
Você não pode comparar
text
com o=
operador, mas deve usar uma das funções de comparação listadas aqui . Observe também a grande caixa de aviso no topo da página, é importante.fonte
Se você não pode alterar o tipo de dados na própria tabela para usar varchar (max), altere sua consulta para este:
fonte
Não é isso que diz a mensagem de erro. Diz que você não pode usar a
=
operadora. Experimente, por exemploLIKE 'foo'
.fonte
Col IN ('foo', 'bar')
é basicamente o mesmo queCol = 'foo' or Col = 'bar'
e terá o mesmo problema.Outra opção seria:
fonte
like 'foo'
possa fornecer melhores estimativas de cardinalidade do que essa abordagem, mas não estou 100% certo.Isso funciona em MSSQL e MySQL:
fonte