Genel Bilgiler
SQL Server
Stored Procedure
✅ Etkilenmez
23.12.2025 15:52
23.12.2025 17:28
İstatistikler
0
Kod Analizi
134
Satır
5
Kullandığı
1
Kullanan
→ Bağımlılık Ağacı
- ITEMSREFERENCES
- PRODUCERCODESREFERENCES
- PRCLISTREFERENCES
- FICHE_LINESREFERENCES
- IMAGELISTREFERENCES
← Etki Ağacı
- SP_MALZEME_ESLESTIRMECALLS_SP
Tam SQL Kodu
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;