Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Access a SQL Server - massimo numero record insert into select

128 views
Skip to first unread message

caezan

unread,
Jul 13, 2021, 2:31:05 AM7/13/21
to
Buongiorno, ho Microsoft Access 2013 e devo fare upload di record da una tabella locale a un'identica tabella in SQL Server.
Per l'upload utilizzo una query Access di tipo INSERT INTO <tabella SQL-Server> ... SELECT... <tabella Access>.
Mi viene restituito l'errore "Risorse di sistema insufficienti" e il trasferimento fallisce lasciando la tabella SQL Server completamente vuota.
Ho verificato che l'errore si verifica con un numero di record maggiore di 8000 circa.
Ho provato a lanciare la query impostando alternativamente il parametro "Utilizza transazione" in Si/No ma l'errore persiste.
Premetto che non mi si è mai posto questo problema forse perché come backend utilizzavo database diversi da SQL Server.
Vi chiedo se avete una soluzione su come risolvere il problema, in particolare:
- posso programmare inserimenti "a tranche" con filtri sui record;
- esiste un parametro nel database Access oppure SQL Server da configurare, quale?
- devo usare inserimento bulk esportando i dati in file di appoggio?
- altra soluzione?
Grazie per l'aiuto.

caezan

unread,
Oct 13, 2021, 12:15:15 PM10/13/21
to
> Buongiorno, ho Microsoft Access 2013 e devo fare upload di record da una tabella locale a un'identica tabella in SQL Server.
> Per l'upload utilizzo una query Access di tipo INSERT INTO <tabella SQL-Server> ... SELECT... <tabella Access>.
> Mi viene restituito l'errore "Risorse di sistema insufficienti" e il trasferimento fallisce lasciando la tabella SQL Server completamente vuota.

Il trasferimento ha avuto successo con la soluzione di INSERT INTO a tranche.
Ho impostato una tranche di TOP 2000 e non esaurisce le risorse.
L'idea è molto semplice:

Do While DCount("[ID]", "TabellaAccess") > 0
DoCmd.OpenQuery "qCaricaTabellaCampioneConTOP2000diCodiciChiavedellaTabellaAccess"
DoCmd.OpenQuery "qInsertSQLServerdelCampioneCodiciChiave"
DoCmd.OpenQuery "qDeleteTabellaAccessdelCampioneCodiciChiave"
Loop

Davide La Mantia

unread,
Oct 16, 2021, 3:13:14 PM10/16/21
to
Ciao

Di pronto accomodo, la tua soluzione è buona, ma per curiosità, che sistema hai?
Perchè avere un alert di risorse insufficienti per 8000 record è abbastanza strano...

Ciao
Davide

caezan

unread,
Nov 26, 2021, 11:04:20 AM11/26/21
to
> > Il trasferimento ha avuto successo con la soluzione di INSERT INTO a tranche.
> > Ho impostato una tranche di TOP 2000 e non esaurisce le risorse.
> > L'idea è molto semplice:
> > Do While DCount("[ID]", "TabellaAccess") > 0
> > DoCmd.OpenQuery "qCaricaTabellaCampioneConTOP2000diCodiciChiavedellaTabellaAccess"
> > DoCmd.OpenQuery "qInsertSQLServerdelCampioneCodiciChiave"
> > DoCmd.OpenQuery "qDeleteTabellaAccessdelCampioneCodiciChiave"
> > Loop
> Di pronto accomodo, la tua soluzione è buona, ma per curiosità, che sistema hai?
> Perchè avere un alert di risorse insufficienti per 8000 record è abbastanza strano...

Ciao Davide, anche a me pare strano ma non rischio di fare interventi su SQL Server 2016 in quanto ci gira l'ERP.
Inoltre, uso Microsoft Access 2013.

Davide La Mantia

unread,
Dec 8, 2021, 7:02:20 PM12/8/21
to
Capisco. A2013 non dovrebbe dare questi problemi.
Comunque ERP a parte, le tue query si basano su viste o direttamente sulle tabelle di origine?
Mi viene in mente che se non gestisci bene gli indici su Access delle tabelle collegate le query potrebbero incasinarsi un po'.

Ciao
0 new messages