una tabla sql_latin1_general_cp1_ci_as significa que modern_spanish_ci_as modern_spanish_ci_ai collations cambiar all sql-server database collation

sql-server - tabla - sql server collations



¿Cómo deshacerse del conflicto de intercalación en una consulta de SQL Server? (3)

Puede resolver el problema obligando a que la intercalación utilizada en una consulta sea una intercalación particular, por ejemplo, SQL_Latin1_General_CP1_CI_AS o DATABASE_DEFAULT . Por ejemplo:

SELECT MyColumn FROM FirstTable a INNER JOIN SecondTable b ON a.MyID COLLATE SQL_Latin1_General_CP1_CI_AS = b.YourID COLLATE SQL_Latin1_General_CP1_CI_AS

En la consulta anterior, a.MyID y b.YourID serían columnas con un tipo de datos basado en texto. El uso de COLLATE obligará a la consulta a ignorar la intercalación predeterminada en la base de datos y, en su lugar, utilizará la intercalación proporcionada, en este caso SQL_Latin1_General_CP1_CI_AS .

Básicamente, lo que está sucediendo aquí es que cada base de datos tiene su propia recopilación que "proporciona reglas de clasificación, propiedades de acento y sensibilidad de acento para sus datos" (de http://technet.microsoft.com/en-us/library/ms143726.aspx ) y se aplica a columnas con tipos de datos textuales , por ejemplo, VARCHAR , CHAR , NVARCHAR , etc. Cuando dos bases de datos tienen intercalaciones diferentes, no puede comparar columnas de texto con un operador como equals (=) sin abordar el conflicto entre las dos intercalaciones dispares.

Estoy trabajando en una vista, en la que estoy usando una combinación interna en dos tablas que son de dos servidores diferentes. Estamos utilizando el servidor vinculado. Al ejecutar la consulta estoy recibiendo este mensaje:

No se puede resolver el conflicto de intercalación entre "SQL_Latin1_General_CP1_CI_AS" y "Arabic_CI_AS" en la operación igual a.

No sé mucho sobre la colación. Buscando en internet encuentro soluciones para usar COLLATE , pero el concepto de COLLATE no me queda claro. ¿Cambiará algo para cualquiera de las bases de datos? Estoy buscando una solución sin cambiar nada para las bases de datos.

Cualquier buen material de aprendizaje para estos conceptos es bienvenido.


Resolví un problema similar envolviendo la consulta en otra consulta ...

La consulta inicial estaba trabajando para encontrar columnas individuales de salida, con algunas de las columnas provenientes de consultas secundarias con la función Máx o Suma, y ​​otra con sustituciones "distintas" o de casos y similares.

Encontré el error de intercalación después de intentar crear un único campo de salida con ...

select rtrim(field1)+'',''+rtrim(field2)+'',''+...

La consulta se ejecutaría como lo escribí, pero el error se produciría después de guardar el sql y volver a cargarlo.

Terminé arreglarlo con algo como ...

select z.field1+'',''+z.field2+'',''+... as OUTPUT_REC from (select rtrim(field1), rtrim(field2), ... ) z

Algunos campos son "máximo" de una subconsulta, con una sustitución de caso si es nulo y otros son campos de fecha, y algunos son uniones dejadas (pueden ser NULL) ... en otras palabras, tipos de campos mixtos. Creo que esta es la causa de que el problema se deba a que la intercalación del sistema operativo y la intercalación de la base de datos son ligeramente diferentes, pero al convertir todas las cadenas recortadas antes de la selección final, se resuelve, todo en el SQL.


si usted mantiene la base de datos, simplemente cree una nueva base de datos e importe los datos de la anterior. El problema de colación se resuelve !!!!!