Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [SQL Server] Problema blocco IF

    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

  2. #2

  3. #3
    Quote Originariamente inviata da optime Visualizza il messaggio
    si in effetti fa al caso mio.
    grazie!

  4. #4

  5. #5
    Ciao ogni ID richiede un END quindi se apri 3 if devi mettere 3 end

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 © 2024 vBulletin Solutions, Inc. All rights reserved.