📄 Tam SQL Kodu (Referans)

Analiz eklerken buradan kod parçalarını kopyalayabilirsiniz

CREATE   PROCEDURE SP_UPDATE_KOD_PRODUCERCODE
    @OldCodes NVARCHAR(MAX), -- Eski CODE degerleri (örn: 'A123,B456,C789')
    @NewCodes NVARCHAR(MAX)  -- Yeni CODE degerleri (örn: 'OEM1,OEM2,OEM3')
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @Old TABLE (rn INT IDENTITY(1,1), OldCode NVARCHAR(100));
    DECLARE @New TABLE (rn INT IDENTITY(1,1), NewCode NVARCHAR(100));
    DECLARE @Skipped TABLE (OldCode NVARCHAR(100), NewCode NVARCHAR(100));

    DECLARE @pos INT = 0, @next INT, @val NVARCHAR(100);

    -- ?? Eski kodlari parçala
    SET @OldCodes = @OldCodes + ',';
    WHILE CHARINDEX(',', @OldCodes, @pos + 1) > 0
    BEGIN
        SET @next = CHARINDEX(',', @OldCodes, @pos + 1);
        SET @val = LTRIM(RTRIM(SUBSTRING(@OldCodes, @pos + 1, @next - @pos - 1)));
        IF @val <> '' INSERT INTO @Old(OldCode) VALUES(@val);
        SET @pos = @next;
    END

    -- ?? Yeni kodlari parçala
    SET @pos = 0;
    SET @NewCodes = @NewCodes + ',';
    WHILE CHARINDEX(',', @NewCodes, @pos + 1) > 0
    BEGIN
        SET @next = CHARINDEX(',', @NewCodes, @pos + 1);
        SET @val = LTRIM(RTRIM(SUBSTRING(@NewCodes, @pos + 1, @next - @pos - 1)));
        IF @val <> '' INSERT INTO @New(NewCode) VALUES(@val);
        SET @pos = @next;
    END

    -- ?? Güncelleme: sadece yeni CODE henüz tabloda yoksa
    UPDATE I
    SET 
        I.PRODUCERCODE = ISNULL(I.PRODUCERCODE, '') + '/' + I.CODE,
        I.CODE = N.NewCode
    FROM LG_011_ITEMS I
    INNER JOIN @Old O ON I.CODE = O.OldCode
    INNER JOIN @New N ON O.rn = N.rn
    WHERE NOT EXISTS (
        SELECT 1 FROM LG_011_ITEMS X WHERE X.CODE = N.NewCode
    );

    -- ?? Hangi kodlarin atlandigini listele
    INSERT INTO @Skipped (OldCode, NewCode)
    SELECT O.OldCode, N.NewCode
    FROM @Old O
    INNER JOIN @New N ON O.rn = N.rn
    WHERE EXISTS (
        SELECT 1 FROM LG_011_ITEMS X WHERE X.CODE = N.NewCode
    );

    -- ?? Sonuç döndür
    DECLARE @UpdatedCount INT = @@ROWCOUNT;

    PRINT '------------------------------------------';
    PRINT '? Güncelleme tamamlandi.';
    PRINT 'Güncellenen kayit sayisi: ' + CAST(@UpdatedCount AS NVARCHAR(10));
    PRINT '------------------------------------------';

    IF EXISTS (SELECT 1 FROM @Skipped)
    BEGIN
        PRINT '?? Asagidaki kodlar zaten tabloda vardi, atlandi:';
        SELECT * FROM @Skipped;
    END
    ELSE
    BEGIN
        PRINT 'Tüm kayitlar basariyla güncellendi, çakisma yok.';
    END
END

➕ Yeni Kod Analizi Ekle

📋 Mevcut Analizler (0)

Henüz kod analizi eklenmemiş.

Yukarıdaki formu kullanarak ilk analizi ekleyin.