Resolver conflicto de intercalación en SQL Server


En ocasiones tenemos que efectuar consultas JOIN o referenciadas entre tablas y cuando estas tienen diferentes intercalaciones (COLLATIONS), SQL Server nos arrojará un error del tipo “Cannot resolve the collation conflict between…” o “No se puede resolver el conflicto de intercalación entre…”.
Pues bien, existe una manera sencilla de superar esta dificultad sin tener que utilizar comandos ALTER para cambiar la intercalación de alguna de las columnas, utilizando la sentencia COLLATE DATABASE_DEFAULT.
Ejemplo, en un escenario como el siguiente, en que se tengan dos o más tablas con diferentes intercalaciones en alguna de sus columnas:

CREATE TABLE Tabla1
(
Id int not null,
Descripcion varchar(50) COLLATE Latin1_General_CS_AS not null
)
GO


CREATE TABLE Tabla2

(
Id int not null,
Descripcion varchar(50) COLLATE Modern_Spanish_CI_AI not null
)
GO
— INSERTANDO VALORES DE PRUEBA
INSERT INTO Tabla1 VALUES (1,‘Descripcion 1’)
INSERT INTO Tabla1 VALUES (2,‘Descripcion 2’)
GO
INSERT INTO Tabla2 VALUES (1,‘Descripcion 1’)
INSERT INTO Tabla2 VALUES (2,‘Descripcion 2’)
GO

Ahora, si intentamos efectuar un JOIN o una consulta de comparación (ejemplo con la claúsula “IN”), SQL nos marcará un error.

SELECT T1.*
FROM Tabla1 T1
INNER JOIN Tabla2 T2
ON T1.Descripcion = T2.Descripcion
–ó
SELECT *
FROM Tabla1
WHERE Descripcion IN ( SELECT Descripcion FROM Tabla2 )

Nos muestra el error: ‘Cannot resolve the collation conflict between “Modern_Spanish_CI_AI” and “Latin1_General_CS_AS” in the equal to operation.’
Ahora, utilzando de la siguiente manera la sentencia “COLLATE DATABASE_DEFAULT”

SELECT T1.*
FROM Tabla1 T1
INNER JOIN Tabla2 T2
ON T1.Descripcion COLLATE DATABASE_DEFAULT = T2.Descripcion COLLATE DATABASE_DEFAULT
— Ó
SELECT *
FROM Tabla1
WHERE Descripcion COLLATE DATABASE_DEFAULT
IN ( SELECT Descripcion COLLATE DATABASE_DEFAULT FROM Tabla2 )

Nos arroja un resultado sin errores:
Id Descripcion
———– ————————————————–
1 Descripcion 1
2 Descripcion 2
(2 row(s) affected)

Related Posts

Conexión a Sql Server con Php 5.6 linux CentOS 6

admin

March 28, 2016

PHP, SQL SERVER

No Comment

Para conectarse a Sql Server desde linux utilizamos este comando para instalar el driver: [bash] $ sudo yum install -y php-mssql [/bash] Por ejemplo, para php5.6: [bash] $ sudo yum install -y php56w-mssql [/bash] Esta instrucción instala freetds, una colección de librerias para conectarnos con Sql Server desde linux. Con esta librería no solo podemos […]

Read More

Scripts de creación de objetos en Sql Server

admin

March 28, 2016

SQL SERVER

No Comment

La manera correcta de crear scripts en Sql Server para la creación de objetos, como tablas, procedimientos almacenados, funciones, restricciones, etc., es la siguiente: Primero, verificar si existe el objeto existe. Si existe, eliminarlo. Posteriormente, crear el objeto. Posteriormente, repetir para los objetos que dependen del que acabamos de crear. **Importante** Establecer siempre la base […]

Read More

3 Comments

  • CarVAn on April 26, 2016

    Excelente aporte, muchas gracias!

  • Alex Sepulveda on August 17, 2017

    Muy buena solución, Gracias por el aporte..!!!

  • Jose Miguel on October 5, 2017

    Gracias. Me ha solucionado la papeleta

Leave a Reply

Your email address will not be published. Required fields are marked *

Busca en el blog aqui

Herramientas Útiles

Suscribete al blog

Recibe en tu correo las últimas publicaciones

Publicidad

Sígueme en Twitter