Genel Bilgiler

SQL Server
Stored Procedure
✅ Etkilenmez
23.12.2025 15:52
23.12.2025 17:28

Notlar

Düzenle

Henüz not eklenmemiş.

+ Not ekle

İstatistikler

0
Kod Analizi
134
Satır
5
Kullandığı
1
Kullanan

Kullandığı Nesneler (5)

REFERENCES
📄 IMAGELIST
REFERENCES
📄 ITEMS
REFERENCES
📄 PRCLIST
REFERENCES
REFERENCES

Kullanan Nesneler (1)

CALLS_SP

Bağımlılık Ağacı

Etki Ağacı

Tam SQL Kodu

Düzenle
CREATE PROC [dbo].[MALZEME_BIRLESTIR]
(
    @referans INT,      -- Birlestirilecek kaynagin ITEM/REFERANS degeri
    @KOD VARCHAR(100)   -- Hedef ITEM'in kodu YANI EKRANDA KALACAK KOD
)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE 
        @ITEMID INT,
        @PRCREF INT,
        @MAXORD INT,
        @KODU   VARCHAR(100);

    BEGIN TRY
        BEGIN TRAN;

        /* 1) @KOD degerine karsilik gelen ITEM'in REF degerini (ITEMID) al */
        SET @ITEMID = ISNULL(
            (SELECT REF 
             FROM dbo.ITEMS 
             WHERE CODE = @KOD), 
            0
        );

        /* 2) Eski kaydin (@referans) bagli oldugu diger tablolardaki ITEMREF degerlerini yeni ITEMID'ye güncelle */
        UPDATE dbo.PRCLIST
        SET ITEMREF = @ITEMID
        WHERE ITEMREF = @referans;

        UPDATE dbo.IMAGELIST
        SET ITEMREF = @ITEMID
        WHERE ITEMREF = @referans;

        UPDATE dbo.FICHE_LINES
        SET ITEMREF = @ITEMID
        WHERE ITEMREF = @referans;

        UPDATE dbo.PRODUCERCODES
        SET STOCKREF = @ITEMID
        WHERE STOCKREF = @referans;

        /* 3) PRCLIST tablosunda, hem @referans hem de @ITEMID için mevcut en büyük ORDER_ degerini bul */
        SET @MAXORD = ISNULL(
            (SELECT MAX(ORDER_) 
             FROM dbo.PRCLIST 
             WHERE ITEMREF IN (@ITEMID, @referans)), 
            0
        );

        /* 4) Mevcut @ITEMID için en ucuz (PRICE ASC) PRC kaydinin REF degerini bul */
        SET @PRCREF = ISNULL(
            (SELECT TOP 1 REF 
             FROM dbo.PRCLIST 
             WHERE ITEMREF = @ITEMID
             ORDER BY PRICE ASC),
            0
        );

        /* 5) Buldugumuz PRC kaydinin ORDER_ degerini en son bulunandan 1 fazlasina ayarla */
        UPDATE dbo.PRCLIST
        SET ORDER_ = @MAXORD + 1
        WHERE REF = @PRCREF;

        /* 6) Eski ITEM (@referans) kodunu (@KODU) sakla */
        SET @KODU = ISNULL(
            (SELECT CODE 
             FROM dbo.ITEMS 
             WHERE REF = @referans), 
            ''
        );

        /* 7) Kaynak ögeyi pasif/sil isaretle; CODE sonuna '+' eklenmis yeni deger zaten varsa sadece SIL=1 yap.
              MODIFIED_DATETIME alanini da o anki tarih-saat ile güncelle. */
        DECLARE @CurrentRefCode VARCHAR(100) = (
            SELECT CODE 
            FROM dbo.ITEMS 
            WHERE REF = @referans
        );
        DECLARE @NewRefCode VARCHAR(101) = @CurrentRefCode + '+';

        IF EXISTS (
            SELECT 1 
            FROM dbo.ITEMS 
            WHERE CODE = @NewRefCode
        )
        BEGIN
            /* Yeni kod zaten var, sadece SIL ve MODIFIED_DATETIME güncelle */
            UPDATE dbo.ITEMS
            SET SIL = 1,
                MODIFIED_DATETIME = GETDATE()
            WHERE REF = @referans;
        END
        ELSE
        BEGIN
            /* Yeni kod henüz yok, SIL, CODE ve MODIFIED_DATETIME güncelle */
            UPDATE dbo.ITEMS
            SET 
                SIL = 1,
                CODE = @NewRefCode,
                MODIFIED_DATETIME = GETDATE()
            WHERE REF = @referans;
        END

        /* 8) Hedef ITEM’in BENZER alanina eski ITEM’in kodunu (@KODU) yaz
              ve MODIFIED_DATETIME'i güncelle */
        UPDATE dbo.ITEMS
        SET BENZER = @KODU,
            MODIFIED_DATETIME = GETDATE()
        WHERE REF = @ITEMID;

        COMMIT TRAN;
    END TRY
    BEGIN CATCH
        IF (@@TRANCOUNT > 0)
        BEGIN
            ROLLBACK TRAN;
        END;

        DECLARE 
            @ErrorMessage  NVARCHAR(4000),
            @ErrorSeverity INT,
            @ErrorState    INT;

        SELECT 
            @ErrorMessage  = ERROR_MESSAGE(),
            @ErrorSeverity = ERROR_SEVERITY(),
            @ErrorState    = ERROR_STATE();

        RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
    END CATCH;
END;

Kodun Çalışma Mantığı (Adım Adım)

Analiz Ekle/Düzenle

Henüz bu nesne için bir analiz girilmemiş.

İlk Analizi Ekle