English
Instant Developer Foundation Documentazione
  • Note di rilascio
  • Instant Developer Foundation
  • Versioni precedenti
  • Versione 10.5.4660
  • Correzioni

SQL: Blocco TRY in stored function

copia link

Descrizione del difetto

In versione 10.1 era stato implementato un miglioramento che permetteva di utilizzare su SQL Server 2005/2008 il costrutto TRY/CATCH nativo del database all'interno delle stored procedure e stored function su database.

Tale costrutto nativo, però, non è utilizzabile all'interno di stored function a causa di limitazioni imposte dal database server. Pertanto a partire dalla versione 10.5:

  • viene generato il mesasggio di warning "1624 - TSQL non ammette TRY/CATCH nelle stored function. Questo blocco potrà intercettare solo eccezioni nell'esecuzione delle query" che richiede una conferma esplicita del programmatore. Tale warning avvisa che se si utilizza il blocco di codice TRY/CATCH in una stored function scritta con Instant Developer non verrà utilizzato il blocco di codice TRY/CATCH nativo bensì un costrutto TSQL che intercetta solo alcuni tipi di errore.

    Attenzione:Il fatto che all'interno di una stored procedure venga utilizzato il costrutto nativo mentre all'interno di una stored function sia utilizzato un controllo differente può generare errori non previsti. Per esempio se si scrive il codice
    try
    {
      int i = 0;
      int j = 0;
      int k = i / j;
    }
    catch ()
    {
      ...
    }
    all'interno di una stored procedure e all'interno di una stored function il comportamento nei due casi sarà differente. All'interno della stored procedure la divisione per 0 sarà trappata dal database server e l'esecuzione della stored procedure proseguirà con le istruzioni presenti nel blocco di codice CATCH. Se, invece, tale codice viene utilizzato all'interno di una stored function l'eccezione non sarà intercettata dal blocco CATCH e verrà inviata all'applicazione generando un errore lato client.

    Effetti del malfunzionamento

    • Se si utilizzava il blocco di codice TRY/CATCH all'interno di una stored function si otteneva un errore durante la procedura di aggiornamento del database poiché TSQL non ammette l'utilizzo del blocco di codice begin try/end try all'interno delle stored procedure.
    • Inoltre se si utilizzava solo il blocco TRY all'interno di una stored procedure si otteneva un ulteriore errore poiché TSQL non permette venga utilizzato solo il blocco di codice begin try/end try.

    Soluzioni

    Questo difetto è stato risolto nella versione 10.5. Non sono disponibili workaround per le versioni precedenti per quanto riguarda il malfunzionamento legato all'uso del blocco TRY/CATCH all'interno delle stored function. Per quanto riguarda il malfunzionamento legato all'utilizzo del solo blocco TRY all'interno di stored procedure è sufficiente inserire un blocco di codice CATCH vuoto.

    Funzionalità interessate

    La scrittura del codice di stored procedure e stored function di database tramite Visual Code Editor.

    Note

    • Malfunzionamento relativo alla richiesta di assistenza 000884-2011.

Ultima modifica: 23/03/2021 / Validità: da 10.5.4660

Vedi anche

  • DBA: Try/Catch su SqlServer 2005/2008

Hai trovato utile l'articolo?

Grazie per il feedback!

Ti serve altro aiuto?

Consulta il Forum