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 igual a.
¿No puedo consultar este tipo de datos con una cláusula WHERE?
                    
                        sql-server
                                sql-server-2005
                                tsql
                                
                    
                    
                        mmcglynn
fuente
                
                fuente

VARCHAR(MAX)lugar deTEXT- ese tipo de datos está obsoletoRespuestas:
Puede usar en
LIKElugar de=. Sin comodines, esto tendrá el mismo efecto.DECLARE @Village TABLE (CastleType TEXT) INSERT INTO @Village VALUES ( 'foo' ) SELECT * FROM @Village WHERE [CastleType] LIKE 'foo'textes obsoleto. Cambiar avarchar(max)será más fácil de trabajar.Además, ¿cuál es el tamaño probable de los datos? Si va a hacer comparaciones de igualdad, idealmente querrá indexar esta columna. Esto no es posible si declara que la columna tiene un ancho superior a 900 bytes, aunque puede agregar una columna calculada
checksumohashque se pueda usar para acelerar este tipo de consulta.fuente
Por favor intente esto
SELECT * FROM [Village] WHERE CONVERT(VARCHAR, CastleType) = 'foo'fuente
No puede comparar
textcon el=operador, sino que debe utilizar una de las funciones de comparación enumeradas aquí . También tenga en cuenta el cuadro de advertencia grande en la parte superior de la página, es importante.fuente
Si no puede cambiar el tipo de datos en la tabla para usar varchar (max), cambie su consulta a esto:
SELECT * FROM [Village] WHERE CONVERT(VARCHAR(MAX), [CastleType]) = 'foo'fuente
Eso no es lo que dice el mensaje de error. Dice que no puede utilizar el
=operador. Prueba, por ejemploLIKE 'foo'.fuente
Col IN ('foo', 'bar')es básicamente el mismoCol = 'foo' or Col = 'bar'y tendrá el mismo problema.Otra opcion seria:
SELECT * FROM [Village] WHERE PATINDEX('foo', [CastleType]) <> 0fuente
like 'foo'podría dar mejores estimaciones de cardinalidad que este enfoque, pero no estoy 100% seguro.Esto funciona en MSSQL y MySQL:
SELECT * FROM Village WHERE CastleType LIKE '%foo%';fuente