SQL Server’da Tekrarlayan Indeks Değerlerini Bulmak

Herkese merhaba,

Bu yazıda SQL Server’da tekrarlayan indeks değerlerini bulmak hakkında bilgi vereceğim.

SQL Server’da bazı durumlarda tekrarlayan indeks değerlerini bulma ihtiyacınız olabilir.

Aşağıdaki kod yardımıyla bu işlemi rahatlıkla yapabilirsiniz.

SELECT tablo1.tabloAdi, --Tablo Adı
       tablo1.indexAdi, --Tekrar Eden 1. Index
       tablo1.KolonAdi, --1. Index Kolon Adı
       tablo2.indexAdi, --Tekrar Eden 2. Index
       tablo2.KolonAdi  --2. Index Kolon Adı
FROM
(
    SELECT DISTINCT
           OBJECT_NAME(i.object_id) tabloAdi,
           i.name indexAdi,
           (
               SELECT DISTINCT
                      STUFF(
                      (
                          SELECT ', ' + k.name
                          FROM sys.index_columns ik1
                              INNER JOIN sys.columns k
                                  ON ik1.object_id = k.object_id
                                     AND ik1.column_id = k.column_id
                          WHERE ik1.index_id = ik.index_id
                                AND ik1.object_id = i.object_id
                                AND ik1.index_id = i.index_id
                          ORDER BY index_column_id
                          FOR XML PATH('')
                      ),
                      1,
                      2,
                      ''
                           )
               FROM sys.index_columns ik
               WHERE object_id = i.object_id
                     AND index_id = i.index_id
           ) AS KolonAdi
    FROM sys.indexes i
        INNER JOIN sys.index_columns ik
            ON i.object_id = ik.object_id
               AND i.index_id = ik.index_id
        INNER JOIN sys.objects o
            ON i.object_id = o.object_id
    WHERE o.is_ms_shipped = 0
) tablo1
    INNER JOIN
    (
        SELECT DISTINCT
               OBJECT_NAME(i.object_id) tabloAdi,
               i.name indexAdi,
               (
                   SELECT DISTINCT
                          STUFF(
                          (
                              SELECT ', ' + k.name
                              FROM sys.index_columns ik1
                                  INNER JOIN sys.columns k
                                      ON ik1.object_id = k.object_id
                                         AND ik1.column_id = k.column_id
                              WHERE ik1.index_id = ik.index_id
                                    AND ik1.object_id = i.object_id
                                    AND ik1.index_id = i.index_id
                              ORDER BY index_column_id
                              FOR XML PATH('')
                          ),
                          1,
                          2,
                          ''
                               )
                   FROM sys.index_columns ik
                   WHERE object_id = i.object_id
                         AND index_id = i.index_id
               ) AS KolonAdi
        FROM sys.indexes i
            INNER JOIN sys.index_columns ik
                ON i.object_id = ik.object_id
                   AND i.index_id = ik.index_id
            INNER JOIN sys.objects o
                ON i.object_id = o.object_id
        WHERE o.is_ms_shipped = 0
    ) tablo2
        ON tablo1.tabloAdi = tablo2.tabloAdi
           AND SUBSTRING(tablo2.KolonAdi, 1, LEN(tablo1.KolonAdi)) = tablo1.KolonAdi
           AND
           (
               tablo1.KolonAdi <> tablo2.KolonAdi
               OR
               (
                   tablo1.KolonAdi = tablo2.KolonAdi
                   AND tablo1.indexAdi <> tablo2.indexAdi
               )
           );

Kodu çalıştırdığınızda aşağıdaki gibi bir sonuç alacaksınız.

Görüldüğü üzere tekrarlayan indeks değerleri bulunmuş oldu.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

SQL Server Eğitimleri Kanalına Abone Olun

Şunlar makaleler de hoşunuza gidebilir

Ads Blocker Image Powered by Code Help Pro
Reklam Eklentisi Kullanıyorsunuz

Lütfen bizlere destek için reklam eklentisi olmadan sitemizi ziyaret edin.

Şimdiden teşekkür ederiz.