MSSQL Onay sinsilesi prosedürü

VERİTABANI GENEL

ÖMER ÇARNAÇAR

20.06.2018

1 Yorum


Merhabalar ,

Son zamanlarda talep edilen  DİĞİTAL FATURA arşivleme uygulaması için  T-SQL ile tüm mekanizmayı kontrol eden Sorguyu paylaşmak istedim.

 

 
/****** Object:  StoredProcedure [dbo].[SP_ONAYLAMA]    Script Date: 20.06.2018 11:08:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_ONAYLAMA]
    @FISNO NVARCHAR(150),
    @USER_ID TINYINT,
    @TIPI NVARCHAR(50),
    @ACIKLAMA NVARCHAR(MAX)
   AS
BEGIN


    DECLARE @ONAY_NUM TINYINT;
    DECLARE @SIRA TINYINT;
    DECLARE @GRUP_KODU TINYINT;
 


    SELECT TOP(1) @ONAY_NUM = FATURA.ONAYNUM , @GRUP_KODU = FATURA.GRUP_KODU
    FROM TBL_FATURALAR AS FATURA
    WHERE FATURA.FISNO =@FISNO;


       


    --PRINT @GRUP_KODU
    --PRINT @ONAY_NUM

    BEGIN TRY
        BEGIN TRANSACTION;
        IF @ONAY_NUM = @USER_ID 
        BEGIN

        IF @TIPI = 'ONAY' BEGIN  
  
            SELECT TOP(1)  @SIRA =  ONAY.SIRA+1
            FROM TBL_ONAY AS ONAY
                INNER JOIN TBL_ONAY_GRUP AS GRUP
                    ON GRUP.KOD = ONAY.GRUP_KODU  INNER JOIN TBL_FATURALAR  AS FATURA ON FATURA.GRUP_KODU = GRUP.KOD
            WHERE  FATURA.ONAYNUM = @USER_ID AND FATURA.FISNO= @FISNO  AND GRUP.KOD = @GRUP_KODU AND ONAY.ONAY_KODU = @USER_ID
            ORDER BY ONAY.SIRA ASC
            ;
        
        
            DECLARE @SIRA_KONTROL TINYINT;

 

            SELECT  @SIRA_KONTROL = COUNT(SIRA) FROM TBL_ONAY  WHERE @GRUP_KODU = GRUP_KODU

            IF @SIRA > @SIRA_KONTROL BEGIN  
                SET @ONAY_NUM = 50--50 arşivi belirtiyor.
            END
            ELSE
            BEGIN
                   SELECT TOP(1) @ONAY_NUM = ONAY.ONAY_KODU
            FROM TBL_ONAY AS ONAY
            WHERE ONAY.SIRA = @SIRA AND @GRUP_KODU = ONAY.GRUP_KODU;


            END
        
            --PRINT @ONAY_NUM;

            UPDATE TBL_FATURALAR
            SET ONAYNUM = @ONAY_NUM
            WHERE FISNO = @FISNO;


     --LOG TUTMA PROSEDURU
     INSERT INTO TBL_ONAY_LOG (ONAY_NUM,TIPI, MAKINA_ADI, ZAMAN, FISNO,ACIKLAMA)
    VALUES (@USER_ID,'ONAYLANDI.', HOST_NAME(), GETDATE(), @FISNO,@ACIKLAMA);
    --BITISI
     END
    IF @TIPI = 'RED' BEGIN  
         
        
        
     

   --        SELECT TOP(1)  @SIRA =  ONAY.SIRA  -1
   --         FROM TBL_ONAY AS ONAY
   --             INNER JOIN TBL_ONAY_GRUP AS GRUP
   --                 ON GRUP.KOD = ONAY.GRUP_KODU  INNER JOIN TBL_FATURALAR  AS FATURA ON FATURA.GRUP_KODU = ONAY.GRUP_KODU
   --         WHERE  FATURA.ONAYNUM = @USER_ID AND FATURA.FISNO= @FISNO  AND GRUP.KOD = @GRUP_KODU
            --ORDER BY ONAY.SIRA ASC
            --;
        
        
             

 

             
   --                SELECT TOP(1) @ONAY_NUM = ONAY.ONAY_KODU
   --         FROM TBL_ONAY AS ONAY
   --         WHERE ONAY.SIRA = @SIRA AND @GRUP_KODU = ONAY.GRUP_KODU;


            UPDATE TBL_FATURALAR
            SET ONAYNUM = 14
            WHERE FISNO = @FISNO;


     --LOG TUTMA PROSEDURU
     INSERT INTO TBL_ONAY_LOG (ONAY_NUM,TIPI, MAKINA_ADI, ZAMAN, FISNO,ACIKLAMA)
    VALUES (@USER_ID,'REDEDİLDİ.', HOST_NAME(), GETDATE(), @FISNO,@ACIKLAMA);
    --BITISI

     END
     

        END;

        COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        PRINT 'Error ' + CONVERT(VARCHAR(50), ERROR_NUMBER()) + ', Severity ' + CONVERT(VARCHAR(5), ERROR_SEVERITY())
              + ', State ' + CONVERT(VARCHAR(5), ERROR_STATE()) + ', Line ' + CONVERT(VARCHAR(5), ERROR_LINE());

        PRINT ERROR_MESSAGE();

        IF XACT_STATE() <> 0
        BEGIN
            ROLLBACK TRANSACTION;
        END;
    END CATCH;

END;

Başlık Değer