Questo articolo parla di come creare una stored procedure in Microsoft SQL Server, vedremo inoltre una tipica struttura di una Stored Procedure da poter usare sempre come template generale!
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 si può usare come base di partenza:
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!