Esecuzione di una stored procedure di SQL Server.

di il
2 risposte

Esecuzione di una stored procedure di SQL Server.

Devo fare un'operazione piuttosto complessa su una grossa mole di dati storici di SQL Server.

La procedura fatta di svariati passaggi sotto Access impiega più di 5 ore (via ODBC e DAO).
La stessa procedura fatta eseguire lato server da una Stored Procedure che fa le stesse cose impiega 6 minuti, ovviamente perchè fatta in locale.
Non si tratta di una operazione fatta di un paio di query, ma qualcosa di molto più articolato.

La prima possibilità è che schedulo come operazione periodica la StoredProcedure su SQL Server.
Da programma poi raccolgo i dati elaborati quando me li ritrovo.

Avrei preferito però fa partire la stored 'a comando' da Access.
Per farlo ho provato a creare un sistema che pensavo potesse essere asincrono.
In pratica ho valorizzato una variabile su cui è stato impostato un Trigger in SQL Server che fa partire la stored procedure.
L'ultima istruzione della stored cambia il valore della variabile.
Per attendere la risposta la maschera Access controlla il campo con un timer, che spegne quando la risposta arriva e prosegue per successive elaborazioni.

Putroppo scopro che all'esecuzione dell' update il programma resta in attesa della conclusione del trigger (e quindi va in timeout).
Provato a fare lo stesso update con una query pass-through ma con lo stesso esito.
Potrei cambiare i tempi d'attesa in modo da non ricevere il timeout, ma avrei preferito davvero due processi separati.

Qualche idea?

2 Risposte

  • Re: Esecuzione di una stored procedure di SQL Server.

    Salve Paolo,

    personalmente, visto la specifica che come dici non richiede espressamente un'esecuzione sincrona, probabilmente andrei, laddove possibile, per la schedulazione nativa di SQL Server...

    un altro sistema, che ti permette invece una notifica asincrona, e' l'utilizzo del Service Broker, vedi ad esempio https://docs.microsoft.com/en-US/sql/database-engine/configure-windows/sql-server-service-broker?view=sql-server-ver16 , che ti permette la ricezione di notifica al termine dell'esecuzione

    [EDIT]
    dimenticavo di indicare che, con Ado.NET, puoi poi consumare le notifiche, https://docs.microsoft.com/en-US/dotnet/framework/data/adonet/sql/enabling-query-notifications...

    salutoni romagnoli
    --
    Andrea
  • Re: Esecuzione di una stored procedure di SQL Server.

    Ho dato un occhiata e il suggerimento era davvero interessante.
    Alla fine però mi sono limitato a lanciare l'update che fa scattare il trigger sotto pass_through con un timeout ODBC impostato a 0.
    In fondo l'operazione lato server nella peggiore delle ipotesi mette 15 minuti.
    La soluzione inoltre introduce un impostazione di sistema che ho tovato ben spiegata su Youtube, ma sono le classiche cose che poi ti dimentichi, e talvolta in caso di Update vanno riviste in fretta e furia, in caso di reinstallazione vanno riimpostate e non di rado con sintassi diverse, oltretutto lega molto a SQL Server (come peraltro le stored), ma un conto è correggere una sintassi SQL un conto una infrastruttura.
    Sicuramente è meno elegante ma sono sicuro che se la riprendo in mano fra 10 anni ancora me la ricordo.
    Grazie comunque, non lo conoscevo, molto interessante.
Devi accedere o registrarti per scrivere nel forum
2 risposte