Cláusula WHERE en el tipo de datos “Texto” de SQL Server

Donde [CastleType] se establece como tipo de datos “texto” en SQL Server y la consulta es:

SELECT * FROM [Village] WHERE [CastleType] = 'foo' 

Me sale el error:

Los tipos de datos TEXT y VARCHAR son incompatibles en el operador equal.

¿No puedo consultar este tipo de datos con una cláusula WHERE?

Puede usar LIKE lugar de = . Sin ningún comodín, esto tendrá el mismo efecto.

 DECLARE @Village TABLE (CastleType TEXT) INSERT INTO @Village VALUES ( 'foo' ) SELECT * FROM @Village WHERE [CastleType] LIKE 'foo' 

text está en desuso Cambiar a varchar(max) será más fácil de usar.

¿Cuán grande es la probabilidad de que los datos sean? Si va a hacer comparaciones de igualdad, idealmente querrá indexar esta columna. Esto no es posible si declara la columna como algo más amplio que 900 bytes, aunque puede agregar una checksum calculada o columna hash que se puede usar para acelerar este tipo de consulta.

Por favor, intente esto

 SELECT * FROM [Village] WHERE CONVERT(VARCHAR, CastleType) = 'foo' 

No puede comparar contra el text con el operador = , sino que debe usar una de las funciones de comparación que se enumeran aquí . También tenga en cuenta el gran cuadro de advertencia en la parte superior de la página, es importante.

Si no puede cambiar el tipo de datos en la tabla para usar varchar (max), cambie su consulta a este:

 SELECT * FROM [Village] WHERE CONVERT(VARCHAR(MAX), [CastleType]) = 'foo' 

Eso no es lo que dice el mensaje de error. Dice que no puedes usar el operador = . Pruebe por ejemplo LIKE 'foo' .

Otra opción sería:

 SELECT * FROM [Village] WHERE PATINDEX('foo', [CastleType]) <> 0 

Esto funciona en MSSQL y MySQL:

 SELECT * FROM Village WHERE CastleType LIKE '%foo%';