Forum

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

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

6 Yazılar
3 Üyeler
8 Likes
2,194 Görüntüleme
Sait ORHAN
(@saitorhan)
Gönderiler: 46
Trusted Member
Konu başlatıcı
 

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

 
Gönderildi : 24/02/2020 08:45
kazimates and kazimates reacted

Hakan Uzuner
(@hakanuzuner)
Gönderiler: 32965
Illustrious Member 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.
*****************************************************************

 
Gönderildi : 24/02/2020 21:42

(@kazimates)
Gönderiler: 667
Noble Member
 

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?

 
Gönderildi : 22/12/2020 14:43

Sait ORHAN
(@saitorhan)
Gönderiler: 46
Trusted Member
Konu başlatıcı
 

@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

 
Gönderildi : 22/12/2020 15:08
kazimates and kazimates reacted

(@kazimates)
Gönderiler: 667
Noble Member
 

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

 
Gönderildi : 22/12/2020 15:50

Sait ORHAN
(@saitorhan)
Gönderiler: 46
Trusted Member
Konu başlatıcı
 

@kazimates Rica ederim. Kolaylıklar dilerim 

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

 
Gönderildi : 22/12/2020 16:16

Paylaş: