[SQL SERVER] The text data type cannot be selected as DISTINCT because it is not comparable

Cuando en una tabla existen atributos donde sus tipos de datos fueron declarados como text, ntext o image, y necesitamos escribir una consulta de tipo SELECT que incluye la declaración DISTINCT obtenemos el siguiente error:

The text data type cannot be selected as DISTINCT because it is not comparable

A partir de la siguiente tabla revisaremos como solucionar el error.

CREATE TABLE #POST(
POST_ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
POST_TITLE VARCHAR(100) NOT NULL,
POST_CONTENT TEXT
)

Insertamos algunos datos

INSERT INTO #POST(POST_TITLE,POST_CONTENT) VALUES('HOW TO COPY AND PASTE FILES','LOREM IMPUM DOLOR SET AMET')
INSERT INTO #POST(POST_TITLE,POST_CONTENT) VALUES('COMO PUBLICAR CÓDIGO FUENTE EN WORDPRESS','LOREM IMPUM DOLOR SET AMET')

Ahora cuando consultemos añadiendo un distinct

SELECT DISTINCT POST_ID ,POST_TITLE, POST_CONTENT FROM #POST

Obtenemos el error

Msg 421, Level 16, State 1, Line 1
The text data type cannot be selected as DISTINCT because it is not comparable.

Solución:

Para solucionar el error tenemos dos opciones, la primera es modificar nuestra consulta transformando el tipo de dato text a varchar(max) de la siguiente manera

SELECT DISTINCT POST_ID ,POST_TITLE, CONVERT( VARCHAR(MAX),POST_CONTENT) FROM #POST

Captura

 

 

 

derechamente modificar el tipo de dato text a varchar(MAX) en la estructura de nuestra tabla,esto no nos traerá problemas futuros, incluso, es recomendable que ya que en versiones posteriores del motor estos tipos de datos quedaran deprecated.

 

ALTER TABLE #POST
ALTER COLUMN POST_CONTENT VARCHAR(MAX)

Ahora podríamos consular sin realizar transformaciones en la query.

SELECT DISTINTC * FROM #POST

 

Saludos!

 

Anuncios