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;