sábado, 8 de noviembre de 2014

RESOLVER PROBLEMA DE COLLATION EN EL JOIN DE UNA CONSULTA EN SQL SERVER

sábado, 8 de noviembre de 2014

Ya había visto ese mensaje antes, así que sabía que estaba mal. Las colaciones para las dos tablas fueron inconsistentes. Como se trataba de una base de datos que se actualizó desde otra versión de SQL, y utiliza los objetos de un tercero, no me sorprendió que se utilizara una intercalación específica. Yo había creado la tabla "b" por mí mismo, usando los valores predeterminados de las bases de datos, y no coincidieron con el objeto.

Hice una búsqueda rápida ya que no podía recordar la sintaxis exacta de la cláusula para añadirlo a mi consulta. Acabé en el blog de un amigo y leí en ese post: No se puede resolver el conflicto de intercalación entre "SQL_Latin1_General_CP1_CI_AS" y "Modern_Spanish_CI_AS" de la operación equal to.

La solución es fácil, añadir un COLLATE DATABASE_DEFAULT a la condición de Join para forzar una intercalación específica sobre el campo. Yo fácilmente podría haber añadido un COLLATE Latin1_General_CI_AS también, pero ya que sabía que el segundo campo era por defecto el de base de datos actual, hice esto:

select TOP 10 * 
 from usuarios a
   inner join baneados b
   on a.idusuario COLLATE DATABASE_DEFAULT = b.idusuario

Leer mas

Buscar

 
Copyright © 2009 .Net Solucion