Discussione:
Access a SQL Server - massimo numero record insert into select
(troppo vecchio per rispondere)
caezan
2021-07-13 06:31:04 UTC
Permalink
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
2021-10-13 16:15:14 UTC
Permalink
Post by caezan
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
2021-10-16 19:13:13 UTC
Permalink
Post by caezan
Post by caezan
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.
Do While DCount("[ID]", "TabellaAccess") > 0
DoCmd.OpenQuery "qCaricaTabellaCampioneConTOP2000diCodiciChiavedellaTabellaAccess"
DoCmd.OpenQuery "qInsertSQLServerdelCampioneCodiciChiave"
DoCmd.OpenQuery "qDeleteTabellaAccessdelCampioneCodiciChiave"
Loop
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
2021-11-26 16:04:19 UTC
Permalink
Post by Davide La Mantia
Post by caezan
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.
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
2021-12-09 00:02:18 UTC
Permalink
Post by caezan
Post by Davide La Mantia
Post by caezan
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.
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.
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

Continua a leggere su narkive:
Loading...