NOTA BENE: So che questa domanda è stata posta un centinaio di volte prima, ma volevo solo verificare che non ci fosse una soluzione più semplice che avrei potuto perdere prima di andare avanti e scrivere / ottenere un sacco di codice per farlo.
Il nostro software utilizza un database originariamente progettato per SQL Server 7 e, come tale, tutti gli script che lo creano non specificano regole di confronto esplicite per nessuna colonna di caratteri. Invece, quando un database viene creato / ripristinato su SQL Server 2000 o versione successiva, ogni colonna eredita le regole di confronto del database (che risulta essere il SQL_Latin1_General_CP1_CI_AS
dato che era l'impostazione predefinita di SQL Server 7).
Teoricamente, questo non importerebbe troppo, dal momento che se il nostro database viene creato da zero sul server di un cliente, eredita le regole di confronto del server del cliente (che è normalmente il predefinito di installazione moderno Latin1_General_CP1_CI_AS
) e tutto funziona. Tuttavia, questo scenario si interrompe quando ci inviano un backup del database o quando inviamo loro un backup del database e riceviamo l'errore di mancata corrispondenza della collazione temuta ogni volta che il codice tenta di accedere alle tabelle temporanee ecc.
Abbiamo cercato di istruire i clienti a installare o ricostruire le loro istanze di SQL Server per utilizzare le regole di confronto preferite, ma ovviamente ciò non sempre accade e non è sempre possibile.
Le soluzioni che implicano la creazione di un nuovo database e la copia dei dati non sono davvero pratiche per noi, abbiamo bisogno di una "bacchetta magica" che possiamo sventolare in un database live per correggere tutte le colonne sul posto senza disturbare i dati. Sto pensando di scrivere un'utility per fare questo, ma dal momento che sarà un lavoro abbastanza grande, qualcuno ha qualche suggerimento più semplice?