Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    23

    [SQL 2005] Controllo Return_Value su lancio Stored Procedure

    Buongiorno,

    All'interno di una stored_procedures devo lanciarne un'altra, che ne richiama un'altra ancora, ma se quest'ultima ritorna con un errore voglio che questo venga scritto in una tabella e che non mandi il tutto in errore.

    Per controllare l'errore uso

    DECLARE @return_value int;

    EXEC @return_value = dbo.sp__Caricamenti

    IF @return_value <> 0
    BEGIN
    UPDATE errori set descrizione='è successo un casino'
    END

    Vorrei che la SP finisse senza dare codici di errori, spero di essermi spiegato

    Grazie mille

    Marco

  2. #2
    un altro contagiato: vuoi indicare che db stai usando? il regolamento non è che l'hanno scritto per rompere, è che le soluzioni variano in base al db!

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    23
    Originariamente inviato da optime
    un altro contagiato: vuoi indicare che db stai usando? il regolamento non è che l'hanno scritto per rompere, è che le soluzioni variano in base al db!
    Ho preso l'aspirina, sai darmi una mano?

  4. #4
    ok, sql 2005

    la soluzione è mettere tutte le sp dentro un costrutto try...catch. In caso di errore, la sp va nella parte catch, dove aggiungerai la registrazione dell'errore. la sp chiamante penserà sempre che la sp chiamata è andata a buon fine e procederà come se nulla fosse. alla fine della catena puoi ispezionare la tabella degli errori ed agire di conseguenza.

    se invece ogni sp chiamante deve sapere cosa ha fatto la sp chiamata per fare azioni diverse, la sp chiamata dovrà restituire in output un valore che la sp chiamante ispezionerà e farà quello che deve fare

    questa la teoria, ma in pratica forse è addirittura più semplice

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    23
    Originariamente inviato da optime
    ok, sql 2005

    la soluzione è mettere tutte le sp dentro un costrutto try...catch. In caso di errore, la sp va nella parte catch, dove aggiungerai la registrazione dell'errore. la sp chiamante penserà sempre che la sp chiamata è andata a buon fine e procederà come se nulla fosse. alla fine della catena puoi ispezionare la tabella degli errori ed agire di conseguenza.

    se invece ogni sp chiamante deve sapere cosa ha fatto la sp chiamata per fare azioni diverse, la sp chiamata dovrà restituire in output un valore che la sp chiamante ispezionerà e farà quello che deve fare

    questa la teoria, ma in pratica forse è addirittura più semplice
    La tua soluzione funziona in parte. Ti spiego cosa mi succede.

    Ho un trigger collegato ad una tabella, alla modifica del record devo far partire una SP il cui nome è contenuto nel record che ho appena modificato.

    Ho strutturato il try e catch ma se la SP non esiste va tutto in errore.

  6. #6
    metti la try...catch anche nel trigger

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    23
    codice:
    USE [mydb]
    GO
    /****** Object:  Trigger [dbo].[lancio_sp_caricamento_dati]    Script Date: 02/26/2011 14:20:22 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Description:	<Modification d'un indicateur provoque une MAJ de la date de modification du plan>
    -- =============================================
    ALTER TRIGGER [dbo].[lancio_sp_caricamento_dati] ON [dbo].[_Caricamenti_Batch]
    FOR UPDATE
    AS
    
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    	
    	DECLARE @codice_sp as nvarchar(250);
    	DECLARE @sp as nvarchar(250);
    	DECLARE @Eseguire as nchar(10);
    	DECLARE @Risultato as nvarchar(250);
    
    	DECLARE	@return_value int;
    	
    	select @codice_sp = codice_sp, @sp = sp, @Eseguire = Eseguire from inserted
    
    	BEGIN TRY
    			if @Eseguire = 'S'
    			BEGIN
    
    				EXEC	@return_value = @sp
    
    				IF @return_value = 0
    				BEGIN
    					SET @Risultato = 'La procedura è terminata con successo'
    				END
    				
    				update dbo._Caricamenti_Batch 
    					set data_esecuzione = getdate(), risultato = @Risultato, eseguire = 'N' 
    					where codice_sp = @codice_sp
    			END
    	END TRY
    
    	BEGIN CATCH
    			
    		SELECT @Risultato = text
    			FROM sys.messages
    			WHERE message_id = (SELECT ERROR_NUMBER() AS ErrorNumber) and language_id = 1040;
    			
    		SET @Risultato = 'ERRORE: ' + @Risultato;
    				
    		update dbo._Caricamenti_Batch 
    			set data_esecuzione = getdate(), risultato = @Risultato, eseguire = 'N' 
    			where codice_sp = @codice_sp
    
    	END CATCH
    END
    Questo è il codice del trigger, se la SP contenuta nel campo @SP non esiste va in errore

    questo è l'errore

    http://img39.imageshack.us/img39/9850/errorebi.jpg

  8. #8
    non fai prima a controllare se la SP esiste?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.