DESCARGO DE RESPONSABILIDAD: Sé que esta pregunta se ha hecho cientos de veces antes, pero solo quería comprobar que no había una solución más fácil que podría haber perdido antes de seguir adelante y escribí / obtuve un montón de código para hacerlo.
Nuestro software utiliza una base de datos que fue diseñada originalmente para SQL Server 7 y, como tal, todos los scripts que la crean no especifican ninguna clasificación explícita para ninguna columna de caracteres. En cambio, cuando se crea / restaura una base de datos a SQL Server 2000 o superior, cada columna hereda la clasificación de la base de datos (lo que sucede SQL_Latin1_General_CP1_CI_AS
porque ese era el valor predeterminado de SQL Server 7).
Teóricamente, esto no importaría demasiado, ya que si nuestra base de datos se crea desde cero en el servidor de un cliente, hereda la intercalación del servidor del cliente (que normalmente es el valor predeterminado de instalación moderno Latin1_General_CP1_CI_AS
) y todo simplemente funciona. Sin embargo, este escenario se rompe cuando nos envían una copia de seguridad de la base de datos, o les enviamos una copia de seguridad de la base de datos, y nosotros o ellos recibimos el temido error de desajuste de intercalación cada vez que el código intenta acceder a las tablas temporales, etc.
Hemos intentado educar a los clientes para que instalen o reconstruyan sus instancias de SQL Server para usar nuestra clasificación preferida, pero, por supuesto, eso no siempre sucede y no siempre es posible.
Las soluciones que implican crear una nueva base de datos y copiar los datos no son realmente prácticas para nosotros, necesitamos una "varita mágica" que podamos agitar en una base de datos en vivo para corregir todas las columnas en su lugar sin alterar los datos. Estoy pensando en escribir una utilidad para hacer esto, pero dado que será un trabajo bastante grande, ¿alguien tiene alguna sugerencia más simple?