1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| AnsiString Sql;
int iMin = 0
int iMax =0
//*creation dune table temporaire contenant deux colonne (int , chaine de caratère )*/
CreateTable(OBJECT);
/* remplir cette table avec les données necessaire*/
Remplir (OBJECT) ;
/*La boucle sert a faire incrémenté les valeur de iMin et iMax, ceci a pour but de faire la mise a jour de la table Mabase..Matable2 a partir de la table Source.. Matable2 par tronçon de 10000 lignes. En effet les deux bases font 50 go la mise a jour directe fait gonflé la base énormément, pour cette raison jai introduit la base temporaire qui permet de faire cette mise a jour par partie en compressant la base Mabase a chaque itération. */
For i = 1 a 100
{
iMin = (i-1)*10000+1
iMax = i*10000
Sql = " Update N1 " ;
Sql = Sql + " set N1.Value = N2.Value, ";
Sql = Sql + " N1.Exist = N2.Exist ";
Sql = Sql + " from";
Sql = Sql + " Mabase..Matable2 N1 ";
Sql = Sql + " inner join Mabase..##OBJECT r1 ";
Sql = Sql + " on r1.ID = N1.ID and r1.OID BETWEEN " + IntToStr (iMin)+ " and " + IntToStr (iMax) ;
Sql = Sql + " inner join Source.. Matable2 N2 ";
Sql = Sql + " on r1.XID = N2.ID and N1.Date=N2.Date and (N1.Value<>N2.Value or N1.Exist <> N2.Exist) ";
Execute (Sql) ;
Shrink (Mabase);
} |
Partager