Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    32

    Problema UPDATE Tabella Grandissime Dimensioni (Cursori, Cicli While..)

    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:

    codice:
    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! VVoVe:
    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    32
    Ehm... era una stupidata :quote::
    UPDATE catalogo
    SET testo = testoOLD
    FROM catalogo,catalogoOLD
    WHERE catalogo.isbn = catalogoOLD.isbnold
    Non ci fate caso sono alla frutta :berto:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.