İleri Seviye SQL Server Sql Server

SQL Server’da Veritabanının Tüm Tabloları ve Tüm Sütunlarında Arama Yapan Prosedür

SQL Server Eğitimleri Kanalına Abone Olun

Herkese merhaba,

Bu yazıda SQL Server’da veritabanının tüm tabloları ve tüm sütunlarında arama yapan prosedür hakkında bilgi vereceğim.

SQL Server’da bazı durumlarda veritabanının tüm tabloları ve tüm sütunlarında arama yapmak isteyebilirsiniz.

Aşağıdaki prosedürü kullanarak siz de bu işlemi rahatlıkla yapabilirsiniz.

--Prosedürün oluşturulması

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

END;

--Prosedürün kullanımı

EXEC dbo.TumTablolardaAramaYap @AranacakKelime = N'PO18850127500'

Prosedürü oluşturup kodu çalıştırdığınızda aşağıdakine benzer bir sonuç göreceksiniz.

SQL Server'da Veritabanının Tüm Tabloları ve Tüm Sütunlarında Arama Yapan Prosedür

Görüldüğü üzere aradığımız kelimenin hangi tabloda ve hangi sütunda olduğu bilgisi gelmiş oldu.

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

52 Kez Okundu
SQL Server Eğitimleri Kanalına Abone Olun

Yazar hakkında

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 birisiyim.

Kopyalamak Yasaktır!