PROBLEMA:
ho una tabella Catalogo di 170.000 righe ed una tabella CatalogoOLD di 8000 righe.
La tabella CatalogoOLD contiene un elenco di libri identificati da un codice ISBN a cui è abbinata una descrizione testuale.
LA tabella Catalogo contiene un elenco molto grande di libri identificati sempre da un codice ISBN a cui è associata una descrizione vuota.
Quello che devo fare è semplicemente copiare le descrizioni che trovo in CatalogoOLD nei campi ISBN corrispondenti della tabella Catalogo.All'apparenza mi sembrava un gioco da ragazzi e invece ho incontrato non poche difficoltà.
CAMPI TABELLA "Catalogo":
isbn - testo
CAMPI TABELLA "CatalogoOLD":
isbnOLD - testoOLD - id, dove id è un campo INT compresi in un intervallo [0..8662]
RISOLUZIONE:
1. attraverso un join sul campo isbn delle due tabelle ho creato come prima cosa una vista di 4000 righe contenenti tutte le descrizioni da inserire
(es: id 63 - isbnOLD 899996789X - testoOLD "Questo libro parla..")
2. ho quindi creato questa STORED PROCEDURE:
DECLARE @contatore AS INT
SET @contatore = 1
-- scorro la vista creata dal join ISBN sulle due tabelle
WHILE @contatore < 8663
BEGIN
-- se id e contatore coincidono effettuo l'UPDATE
IF EXISTS(SELECT id FROM descrizioniOLD WHERE id = @contatore)
BEGIN
UPDATE catalogo
SET testo = (SELECT testoOLD
FROM descrizioniOLD
WHERE id = @contatore)
WHERE isbn = (SELECT isbnOLD
FROM descrizioniOLD
WHERE id = @contatore)
END
-- incremento in ogni caso il contatore
SET @contatore = @contatore + 1
print 'contatore = '+ STR(@contatore)
END
Ebbene.. l'algoritmo pare funzionare bene ma estremamente a rilento rendendone impossibile la terminazione. Stoppando la procedura dopo 5 minuti esatti ho notato che erano state esaminate solo 70 righe stimando che per completare la procedura sarebbe state necessario un tempo di all'incirca 10 ore!
Qualcuno sa consigliarmi un metodo più efficiente?
p.S: ho provato anche con un cursore ma SQLServer mi segnala che non può esaminare più di 100 righe.. è possibile aumentare questo valore? A livello di prestazioni che metodo è meglio adottare? Ciao a tutti e grazie in anticipo a chi prova a darmi una mano
Modificato da Mauri77 il 24 gennaio 2007 20.27 -