Forum

String İfadeyi Tüm ...
 
Bildirimler
Hepsini Temizle

[Çözüldü] String İfadeyi Tüm Veri Tabanı İçerisinde Arama

Sait ORHAN
(@saitorhan)
Üye

Belli bir string ifadenin hangi tabloların hangi kolonlarında geçtiğini bulmak için aşağıdaki stored prosedurü oluşturup kullanabilirsiniz.

CREATE PROC SearchAllTables
(
    @SearchStr nvarchar(100)
)
AS
BEGIN

CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
    SET  @TableName = ''
    SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

WHILE @TableName IS NOT NULL

BEGIN
        SET @ColumnName = ''
        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', 'int', 'decimal')
                    AND    QUOTENAME(COLUMN_NAME) > @ColumnName
            )

IF @ColumnName IS NOT NULL

BEGIN
                INSERT INTO #Results
                EXEC
                (
                    'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)
                    FROM ' + @TableName + ' (NOLOCK) ' +
                    ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
                )
            END
        END   
    END

SELECT ColumnName, ColumnValue FROM #Results
END

image

 

 

---------
Sait ORHAN
Bilgisayar Mühendisi
Web: http://saitorhan.com

Alıntı
Topic starter Gönderildi : 24/02/2020 08:45
kazimates beğendi
Hakan Uzuner
(@hakanuzuner)
Kıdemli Üye Yönetici

Eline sağlık

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

CevapAlıntı
Gönderildi : 24/02/2020 21:42
Sait ORHAN beğendi
kazimates
(@kazimates)
Üye

Burada search edeceğim değeri nereye yazmam gerekiyor? Ayrıca serach ettiğim zaman bana sadece başarılı olarka çalıştı diye bir query  output geliyor ilgili kelimeler nerede diye bir output nerede göreceğim?

CevapAlıntı
Gönderildi : 22/12/2020 14:43
Sait ORHAN
(@saitorhan)
Üye

@kazimates

Bu kodu çalıştırdıktan sonra SearchAllTables adında bir stored procedure oluşur.

exec SearchAllTables 'aranacak_kelime' ile stored procedurü çalıştırarak sonucu bulabilirsiniz.

---------
Sait ORHAN
Bilgisayar Mühendisi
Web: http://saitorhan.com

CevapAlıntı
Topic starter Gönderildi : 22/12/2020 15:08
kazimates beğendi
kazimates
(@kazimates)
Üye

@saitorhan çözümünüz için çok teşekkür ederim.

CevapAlıntı
Gönderildi : 22/12/2020 15:50
Sait ORHAN beğendi
Sait ORHAN
(@saitorhan)
Üye

@kazimates Rica ederim. Kolaylıklar dilerim 

---------
Sait ORHAN
Bilgisayar Mühendisi
Web: http://saitorhan.com

CevapAlıntı
Topic starter Gönderildi : 22/12/2020 16:16
Paylaş: