SQL Server’da Tüm Tablolarda Arama Yapan Prosedür

Herkese merhaba,

Bu yazıda SQL Server’da tüm tablolarda arama yapan prosedür hakkında bilgi vereceğim.

SQL Server’da bazı durumlarda tüm tablolarda arama yapmak isteyebilirsiniz.

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

CREATE PROC TumTablolardaArama
(@AranacakKelime NVARCHAR(100))
AS
BEGIN
    CREATE TABLE #Sonuclar
    (
        TabloAdi NVARCHAR(370),
        KolonAdi NVARCHAR(370),
        KolonDegeri NVARCHAR(3630)
    );
    SET NOCOUNT ON;
    DECLARE @TabloAdi NVARCHAR(256),
            @KolonAdi NVARCHAR(128),
            @AranacakKelime2 NVARCHAR(110);
    SET @TabloAdi = N'';
    SET @AranacakKelime2 = QUOTENAME('%' + @AranacakKelime + '%', '''');
    WHILE @TabloAdi IS NOT NULL
    BEGIN
        SET @KolonAdi = N'';
        SET @TabloAdi =
        (
            SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
            FROM INFORMATION_SCHEMA.TABLES
            WHERE TABLE_TYPE = 'BASE TABLE'
                  AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TabloAdi
                  AND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0
        );
        WHILE (@TabloAdi IS NOT NULL) AND (@KolonAdi IS NOT NULL)
        BEGIN
            SET @KolonAdi =
            (
                SELECT MIN(QUOTENAME(COLUMN_NAME))
                FROM INFORMATION_SCHEMA.COLUMNS
                WHERE TABLE_SCHEMA = PARSENAME(@TabloAdi, 2)
                      AND TABLE_NAME = PARSENAME(@TabloAdi, 1)
                      AND DATA_TYPE IN ( 'char', 'varchar', 'nchar', 'nvarchar' )
                      AND QUOTENAME(COLUMN_NAME) > @KolonAdi
            );
            IF @KolonAdi IS NOT NULL
            BEGIN
                INSERT INTO #Sonuclar
                EXEC ('SELECT ''' + @TabloAdi + ''', ''' + @TabloAdi + '.' + @KolonAdi + ''', LEFT(' + @KolonAdi + ', 3630) 
FROM '          + @TabloAdi + ' (NOLOCK) ' + ' WHERE ' + @KolonAdi + ' LIKE ' + @AranacakKelime2);
            END;
        END;
    END;
    SELECT *
    FROM #Sonuclar;
END;

--Kullanımı

EXEC TumTablolardaArama @AranacakKelime = N'Yavuz';

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

SQL Server’da Tüm Tablolarda Arama Yapan Prosedür

Görüldüğü üzere aranan Yavuz değeri Müşteriler tablosunda bulunmuş oldu ve ayrıca tam olarak değer bilgisi de getirilmiş oldu.

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

465 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!