Problemi di confronto SQL durante la distribuzione live
-
05-07-2019 - |
Domanda
La storia: L'altra sera ho avuto una distribuzione che prevedeva l'esecuzione di uno script che creava una procedura memorizzata. Tuttavia, durante l'esecuzione dello script, si è verificato un errore relativo alle regole di confronto del DB.
Il problema: Con l'aiuto del nostro amico Google, sono riuscito a scoprire che il problema che stavo avendo era perché il db del nostro ambiente dal vivo ha un confronto e il confronto temporaneo del DB è diverso e ho riscontrato un errore durante il tentativo di inserimento in una variabile tavolo.
La domanda: Qual è il modo migliore per procedere o le mie opzioni?
Ambiente: sql 2000
Grazie in anticipo.
Soluzione
Ci siamo imbattuti in questo con database temporanei che utilizziamo per i test di integrazione, in relazione ai database di sviluppo e produzione. Quello che abbiamo fatto è assicurarci che tutti i database utilizzino le stesse regole di confronto. Nel tuo caso, dovresti probabilmente essere in grado di fare una semplice ricerca / sostituzione nel file di script e semplicemente cambiare le regole di confronto con quella utilizzata nel database di destinazione.
Modifica: cambiare lo script ti farà avanzare ora; a lungo termine, ti consigliamo di utilizzare la stessa raccolta in tutti i database correlati.
Altri suggerimenti
Esistono alcune soluzioni
- Assicurati che tutti i tuoi fascicoli corrispondano nello stesso db. Altrimenti avrai un po 'di dolore.
- La cosa giusta da fare se le tabelle temporanee non contengono molti dati è ricrearle con le stesse regole di confronto delle tabelle dest.
-
Se questa non è un'opzione, cerca i tipi di stringa e forza la tua fascicolazione sul db di destinazione
INSERT INTO dest_db..DEST_TABLE ( DEST_VARCHAR_COLUMN ) SELECT TMP_VARCHAR_COLUMN COLLATE <dest_db_collate> FROM tmp_db..#TEMP_TABLE
La soluzione ovvia è reinstallare il database di sviluppo con le stesse regole di confronto del database di produzione.
Se non è possibile, ad esempio se si dispone di più database di produzione con regole di confronto diverse, è possibile assicurarsi che gli aggiornamenti non riescano o abbiano esito positivo nel suo insieme. Metti una transazione attorno a tutti gli aggiornamenti delle procedure memorizzate e assicurati di utilizzare alter, non drop / create.