CREATE or alter PROCEDURE StokKodAdDegistir 
    @STOKADI NVARCHAR(500), 
    @STOKKODU NVARCHAR(40), 
    @EskiStokKodu NVARCHAR(40), 
    @STOKADI2 NVARCHAR(100) = '' 
AS 
BEGIN
    SET NOCOUNT ON; 

    -- Belirtilen tüm tablolarda Barkodu veya Kodu alanlarının kontrolü
    IF EXISTS (
        SELECT 1 FROM StokBarkodlari WHERE Barkodu = @STOKKODU 
        UNION ALL
        SELECT 1 FROM STOKKARTI WHERE Barkodu = @STOKKODU  OR IkinciBirimBarkodu = @STOKKODU OR UcuncuBirimBarkodu = @STOKKODU
			OR DorduncuBirimBarkodu = @STOKKODU OR BesinciBirimBarkodu = @STOKKODU OR AltinciBirimBarkodu = @STOKKODU
        UNION ALL
        SELECT 1 FROM RenkBedenTablosu WHERE Barkodu = @STOKKODU
    )
    BEGIN
        RAISERROR('Girdiğiniz stok kodu/barkodu sistemdeki tablolarda (StokBarkodlari, STOKARTI veya RenkBedenTablosu) zaten mevcuttur. İşlem iptal edildi.', 16, 1);
        RETURN;
    END

    -- Kontrollerden geçerse güncelleme işlemine başla
    BEGIN TRANSACTION;
    
    BEGIN TRY
		 UPDATE STOKHAR SET StokAdi = @STOKADI, StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE MuadilStoklar SET MuadilStokAdi = @STOKADI, MuadilStokKodu= @STOKKODU where MuadilStokKodu= @EskiStokKodu                
		 UPDATE StokFiyat SET Kodu= @STOKKODU where Kodu= @EskiStokKodu                
		 UPDATE StokDB SET StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE StokFiyatLog SET Kodu= @STOKKODU where Kodu= @EskiStokKodu                
		 UPDATE StokMarkalari SET StokKodu= @STOKKODU where StokKodu=@EskiStokKodu                
		 UPDATE Tedarikciler SET StokAdi = @STOKADI, StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE PYazarKasaStoklari SET StokAdi = @STOKADI, StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE PYazarKasaHar SET StokAdi = @STOKADI, StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE PPetrolHar SET StokAdi = @STOKADI, StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE PDegFiyatlar SET StokAdi = @STOKADI, StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE DonemselFiyatListesi SET StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE TekstilHareketTablosu SET StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE TekstilHataHareketTablosu SET StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE TekstilHataliStokVirmanSablonu SET HataliStokKodu= @STOKKODU where HataliStokKodu= @EskiStokKodu                
		 UPDATE TekstilHataliStokVirmanSablonu SET VirmanStokKodu= @STOKKODU where VirmanStokKodu= @EskiStokKodu                
		 UPDATE TekstilIsEmirleriDetayi SET StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE TekstilKesimTablosu SET StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE TekstilStokRenkTanimlari SET StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE CariUretimFiyatlari SET StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE Seri SET StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE Tarim_AmbalajStok SET StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 UPDATE Tarim_AmbalajStok SET AmbalajKodu= @STOKKODU where AmbalajKodu= @EskiStokKodu                
		 UPDATE StokDB SET StokKodu= @STOKKODU where StokKodu= @EskiStokKodu                
		 update MH_Connect SET Degeri =@STOKKODU where Degeri=@EskiStokKodu and TabloAdi='STOKKARTI' and FieldAdi='Kodu'                
		 Update StokTablolari   Set StokKodu=@STOKKODU Where StokKodu=@EskiStokKodu                  
		 Update Tarim_AmbalajStok  Set StokKodu=@STOKKODU Where StokKodu=@EskiStokKodu                  
		 Update Tarim_AmbalajStok  Set AmbalajKodu=@STOKKODU Where AmbalajKodu=@EskiStokKodu                  
		 Update Tarim_SatisEmirleri  Set StokKodu=@STOKKODU, StokAdi=@STOKADI Where StokKodu=@EskiStokKodu                  
		 Update Tarim_UretimDetay  Set StokKodu=@STOKKODU, StokAdi=@STOKADI Where StokKodu=@EskiStokKodu                  
		 Update Tarim_UretimDetay  Set KasaKodu=@STOKKODU Where KasaKodu=@EskiStokKodu                  
		 Update Tarim_UretimDetay  Set PaletKodu=@STOKKODU Where PaletKodu=@EskiStokKodu                  
		 Update Tarim_UretimDetay2  Set StokKodu=@STOKKODU, StokAdi=@STOKADI Where StokKodu=@EskiStokKodu                  
		 Update Tarim_UrunAlim   Set StokKodu=@STOKKODU, StokAdi=@STOKADI Where StokKodu=@EskiStokKodu                  
		 Update Tarim_UrunAlimAmbalaj Set StokKodu=@STOKKODU, StokAdi=@STOKADI Where StokKodu=@EskiStokKodu                  
		 Update Tarim_UrunAlimHareket Set KasaKodu=@STOKKODU Where KasaKodu=@EskiStokKodu                  
		 Update Tarim_UrunAlimHareket Set PaletKodu=@STOKKODU Where PaletKodu=@EskiStokKodu                  
		 Update StokTartim    Set StokKodu=@STOKKODU, StokAdi=@STOKADI Where StokKodu=@EskiStokKodu             
		 Update StokTartimPalet   Set StokKodu=@STOKKODU, StokAdi=@STOKADI Where StokKodu=@EskiStokKodu                 
		 Update CariDonemFiyatlari set StokKodu=@STOKKODU Where StokKodu=@EskiStokKodu                 
		 Update ElTerminaliDepoSayim set StokKodu=@STOKKODU, StokAdi=@STOKADI  Where StokKodu=@EskiStokKodu                 
		 Update ElTerminaliYukleme set StokKodu=@STOKKODU, StokAdi=@STOKADI  Where StokKodu=@EskiStokKodu                 
		 Update EtiketBarkod set StokKodu=@STOKKODU, StokAdi=@STOKADI  Where StokKodu=@EskiStokKodu                 
		 Update MiktarsalHedefler set StokKodu=@STOKKODU Where StokKodu=@EskiStokKodu                 
		 Update RenkBedenSeriTablosu set StokKodu=@STOKKODU Where StokKodu=@EskiStokKodu                 
		 Update RenkBedenTablosu set StokKodu=@STOKKODU Where StokKodu=@EskiStokKodu                 
		 Update SIPARISHAR set StokKodu=@STOKKODU, StokAdi=@STOKADI  Where StokKodu=@EskiStokKodu                 
		 Update TEKLIFHAR set StokKodu=@STOKKODU, StokAdi=@STOKADI  Where StokKodu=@EskiStokKodu                   
		 Update SeriNoKaliteKontrol set StokKodu=@STOKKODU Where StokKodu=@EskiStokKodu                 
		 Update SipHar set StokKodu=@STOKKODU Where StokKodu=@EskiStokKodu               
		 Update StokDepoMiktarlari set StokKodu=@STOKKODU Where StokKodu=@EskiStokKodu                 
		 Update StokVergiMuafiyetleri set StokKodu=@STOKKODU Where StokKodu=@EskiStokKodu                 
		 UPDATE InvoiceItemMap SET OurCode = @STOKKODU,SenderItemName = @STOKADI where OurCode = @EskiStokKodu                
		 UPDATE STOKKARTI SET Kodu= @STOKKODU, StokAdi=@STOKADI,StokAdi2 = @STOKADI2,Barkodu = @STOKKODU where Kodu= @EskiStokKodu   
		 Update StokBarkodlari set Barkodu=@STOKKODU  Where StokKodu=@EskiStokKodu and AnaBirim = 1             
		 Update StokBarkodlari set StokKodu=@STOKKODU  Where StokKodu=@EskiStokKodu       
        COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        -- Güncelleme sırasında bir hata oluşursa işlemi geri al
        IF @@TRANCOUNT > 0
            ROLLBACK TRANSACTION;

        DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE();
        DECLARE @ErrorSeverity INT = ERROR_SEVERITY();
        DECLARE @ErrorState INT = ERROR_STATE();
        
        RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
    END CATCH
END;
