ciao!
scusate la domanda probabilmente stupida, ma non riesco a capire dove posizionare un blocco IF/ELSE.
ovunque lo metto mi da errore.
l'errore è generico, e mi dice solo che c'è un problema di sintassi.
se levo il blocco IF/ELSE invece nessun problema.
questo il codice dell'ultimo tentativo:
codice:
USE [....]
GO
/****** Object: StoredProcedure [dbo].[usp_DuplicaScadenzario] Script Date: 24/11/2019 10:54:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[usp_DuplicaScadenzario] @idScadenzario INT
,@TipoDuplicazione CHAR(2)
,@ERROR_NUMBER AS INT = 0 OUTPUT
,@ERROR_SEVERITY AS INT = 0 OUTPUT
,@ERROR_STATE AS INT = 0 OUTPUT
,@ERROR_PROCEDURE AS NVARCHAR(126) = '' OUTPUT
,@ERROR_LINE AS INT = 0 OUTPUT
,@ERROR_MESSAGE AS NVARCHAR(4000) = '' OUTPUT
,@NUMROWSAFFECTED AS INT = NULL OUTPUT
AS
BEGIN
-- SET NOCOUNT ON;
DECLARE @max_year INT = 2021
DECLARE @year_now INT = YEAR(GETDATE())
DECLARE @cnt_year INT = 0
DECLARE @datepart VARCHAR(50) = ''
IF @TipoDuplicazione ='1Y'
SET @datepart = 'YEAR'
ELSE IF @TipoDuplicazione ='1M'
SET @datepart = 'MONTH'
ELSE IF @TipoDuplicazione ='1S'
SET @datepart = 'WEEK'
ELSE IF @TipoDuplicazione ='1d'
SET @datepart = 'DAY'
END
BEGIN TRY
WHILE @year_now < @max_year
BEGIN
SET @year_now = @year_now + 1;
SET @cnt_year = @cnt_year + 1;
INSERT INTO Scadenzario (
codTabella
,TipoTabella
,DataInizio
,DataFine
,TipoScadenza
,Promemoria
,Tipologia
,Riferimento
,Eseguito
)
SELECT codTabella
,TipoTabella
,DATEADD(YEAR, @cnt_year, DataInizio)
,DATEADD(YEAR, @cnt_year, DataFine)
,TipoScadenza
,Promemoria
,Tipologia
,Riferimento
,Eseguito
FROM Scadenzario
WHERE idScadenzario = @idScadenzario;
END;
END TRY
BEGIN CATCH
PRINT 'CATCH:' + ERROR_MESSAGE()
-- Rollback any active or uncommittable transactions before
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
SELECT @ERROR_NUMBER = ERROR_NUMBER()
,@ERROR_SEVERITY = ERROR_SEVERITY()
,@ERROR_STATE = ERROR_STATE()
,@ERROR_PROCEDURE = ERROR_PROCEDURE()
,@ERROR_LINE = ERROR_LINE()
,@ERROR_MESSAGE = ERROR_MESSAGE()
END CATCH;
END