Hacer una unión entre dos bases de datos con diferentes colaciones en SQL Server y obtener un error


Lo sé, lo sé con lo que escribí en la pregunta no debería sorprenderme. Pero mi situación está trabajando lentamente en un sistema POS heredado y mi predecesor aparentemente no era consciente de las uniones, así que cuando miré en una de las páginas internas que se carga durante 60 segundos, veo que es bastante rápido, reescribe estas 8 consultas como una consulta con la situación de uniones. El problema es que además de no saber de JOINs también parece haber tenido un fetiche por múltiples bases de datos y sorpresa, sorpresa que utilice diferentes intercalaciones. El hecho es que usamos todos los caracteres latinos "normales" que la gente de habla inglesa consideraría todo el alfabeto y todo esto estará fuera de uso en unos meses, así que solo necesito una curita.

En resumen, necesito algún tipo de método para convertir a una sola colación para poder comparar dos campos de dos bases de datos.

El error exacto es:

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

Author: casperOne, 2010-02-18

2 answers

Puede usar la cláusula collate en una consulta (no puedo encontrar mi ejemplo en este momento, por lo que mi sintaxis es probablemente incorrecta, espero que le indique la dirección correcta)

select sone_field collate SQL_Latin1_General_CP850_CI_AI
  from table_1
    inner join table_2
      on (table_1.field collate SQL_Latin1_General_CP850_CI_AI = table_2.field)
  where whatever
 111
Author: Ray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-18 17:39:45

Una forma de propósito general es coaccionar la intercalación a DATABASE_DEFAULT. Esto elimina el hardcoding el nombre de intercalación que podría cambiar.

También es útil para la tabla temporal y las variables de la tabla, y donde es posible que no conozca la recopilación del servidor (por ejemplo, es un proveedor que coloca su sistema en el servidor del cliente)

select
    sone_field collate DATABASE_DEFAULT
from
    table_1
    inner join
    table_2 on table_1.field collate DATABASE_DEFAULT = table_2.field
where whatever
 52
Author: gbn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-09 14:09:05