← Detay Sayfası
Nesne Düzenle
|
MALZEME_BIRLESTIR
İlgili Uygulama
-- Seçiniz --
SQL Server
Nesne Türü
View
Stored Procedure
Trigger
Job
Nesne Adı
Bu nesne dönem devrinden etkileniyor mu? (Örn: İçinde _01_ gibi sabit dönem kodu var mı?)
Genel Kullanım Amacı ve Notlar
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;
Oluşturulma: 23.12.2025 15:52
Son Güncelleme: 23.12.2025 17:28
İptal
Nesneyi Sil
Değişiklikleri Kaydet