SQLServer: Error al comparar 2 campos con diferente collation (idioma)

Si estas comparando 2 tablas de diferentes bases de datos, y cada una tiene su propio idioma o collation como lo llama Microsoft (la vda no se bien que signifique pero es algo del encoding). y pues te sale este mensaje:

SQL EXecution Error.
Executed SQL statement: SELECT * FROM tabla…..
Error Source: .Net SqlCliente Data Provider
Error Message: Cannot resolve the collation conflict between
“Modern_Spanish_CI_AS” and “SQL_Latin1_General_CP1_CI_AS” in the equal to operation.

LA solución es poner en tu WHERE el tipo de collation que quieres utilizar para que haga la conversión SQL Server, teniendo algo como esto:

SELECT * FROM tabla, tabla2 WHERE tabla1.campo1 COLLATE Modern_Spanish_CI_AS = tabla2.campo2 COLLATE Modern_Spanish_CI_AS

Bueno la consulta no es la mejor! tendria que esta en un INNER JOIN pero jeje, este no es el tema., y listo! la consulta ya funciona., no se si luego existan problemas con acentos o caracteres raros, pero para texto casi normal, no debería de fallar.

8 thoughts on “SQLServer: Error al comparar 2 campos con diferente collation (idioma)

  1. No utilizo un where, sino un group by. .. .. ..
    ==================
    SELECT
    CliDIM.ClienteKey,ProDIM.ProductoKey,
    TiemDIM.PersonalKey,TiDIM.TiempoKey,
    Soles = SUM(dd.cantidad * dd.precunit),
    Cantidad = SUM(dd.cantidad),
    Peso = SUM(dd.cantidad * p.Peso)
    FROM
    documento d INNER JOIN detadoc dd
    ON d.documento = dd.documento AND d.tipodoc = dd.tipodoc INNER JOIN Tenebrosa_Mart_Y.dbo.Cliente_dim CliDIM
    ON CliDIM.idCliente=d.Cliente INNER JOIN Tenebrosa_Mart_Y.dbo.Producto_dim ProDIM
    ON ProDIM.idProducto=dd.Producto INNER JOIN Tenebrosa_Mart_Y.dbo.Personal_dim TiemDIM
    ON TiemDIM.idPersonal =d.Personal INNER JOIN Tenebrosa_Mart_Y.dbo.Tiempo_dim TiDIM
    ON TiDIM.Fecha = d.Fecha INNER JOIN Producto p
    ON p.producto = dd.producto

    — where COLLATE Modern_Spanish_CI_AS

    GROUP BY CliDIM.ClienteKey, ProDIM.ProductoKey, TiemDIM.PersonalKey, TiDIM.TiempoKey

  2. Este error sucede cuando tiene collection diferentes, generalmente cuando se copia una tabla de una base de datos a otra, cuando reinstalamos sql y atachamos las bases de datos, en fin, hay muchas circunstancias.

    la solución a este problema es simple:
    1-abra el sql
    2-dele propiedades a la base de datos
    3-opciones
    4-puede cambiar el collation, luego aceptar.

    nota: la base datos no debe estar en uso por otro usuario

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *