Vediamo una tipica struttura di una Stored Procedure da poter usare sempre!
Il codice che vedete è stato preparato e testato per Microsoft SQL Server e usato fino alla versione 2016.
Il seguente è un tipico template di una stored procedure scritta in Transact-SQL* che io uso nei miei sviluppi:
USE [MyDB]
GO
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION [MyTrans]
--declare section
DECLARE @CODICE_ERRORE INTEGER = NULL
DECLARE @ERRORMESSAGE NVARCHAR(max) = NULL
DECLARE @LEVEL NVARCHAR(10) = NULL
DECLARE @TIMESTAMP DATETIME2 = NULL
DECLARE @count INTEGER = 0
DECLARE @curId INTEGER = 0
--do your operation here
--DECLARE userCur CURSOR FOR
--SELECT ID
--FROM dbo.MyTable
OPEN userCur
FETCH NEXT FROM userCur INTO @curId
WHILE @@FETCH_STATUS = 0
BEGIN
SET @count = @count + 1
--UPDATE [dbo].... this is my query
FETCH NEXT FROM userCur INTO @curId
END
CLOSE userCur
DEALLOCATE userCur
COMMIT TRANSACTION [MyTrans];
END TRY
BEGIN CATCH
SET @CODICE_ERRORE = @@ERROR
SET @ERRORMESSAGE = ERROR_MESSAGE()
SET @LEVEL = 'ERROR'
SET @TIMESTAMP = GETDATE()
ROLLBACK TRANSACTION [MyTrans];
PRINT CONVERT(VARCHAR, @TIMESTAMP) + ' - ' + @LEVEL + 'RIGA: ' + CAST(ERROR_LINE() as VARCHAR) + ' ERROR - [' + CAST(@CODICE_ERRORE as VARCHAR) +'] - ' + @ERRORMESSAGE;
;THROW
END CATCH
PRINT 'END'
In questo esempio si fa uso dei cursori per processare i record necessari.
Nel ciclo while avviene il process vero e proprio.
In caso di errore/eccezione viene gestito un output completo e fatta la rollback.
*Transact SQL
Il linguaggio Transact-SQL (o T-SQL) è l'estensione proprietaria del linguaggio SQL sviluppata da Microsoft e viene fornita insieme a Microsoft SQL Server.
Per maggiori informazioni fate riferimento alla guida Microsoft qui.
Buon lavoro!