Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mencari Rentetan Merentasi Semua Jadual dengan Cekap dalam Pangkalan Data Pelayan SQL?

Bagaimana untuk Mencari Rentetan Merentasi Semua Jadual dengan Cekap dalam Pangkalan Data Pelayan SQL?

Susan Sarandon
Lepaskan: 2025-01-15 08:26:42
asal
865 orang telah melayarinya

How to Efficiently Search for Strings Across All Tables in a SQL Server Database?

Mencari Rentetan Merentas Semua Jadual dalam Pangkalan Data Pelayan SQL

Panduan ini menunjukkan kaedah untuk mencari rentetan tertentu (cth., "john") dalam semua jadual pangkalan data SQL Server. Kami akan menggunakan pembolehubah jadual dan pertanyaan ad-hoc, teknik yang sesuai untuk persekitaran dengan sekatan pada jadual sementara atau prosedur tersimpan. Ambil perhatian bahawa pendekatan ini memerlukan contoh SQL Server anda untuk menyokong pembolehubah jadual. Pernyataan USE mengehadkan carian kepada pangkalan data tertentu.

<code class="language-sql">USE DATABASE_NAME

DECLARE @SearchStr nvarchar(100) = 'john'
DECLARE @Results TABLE (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</code>
Salin selepas log masuk

Melaksanakan pertanyaan ini akan mengembalikan senarai jadual dan baris yang mengandungi rentetan carian.

Atas ialah kandungan terperinci Bagaimana untuk Mencari Rentetan Merentasi Semua Jadual dengan Cekap dalam Pangkalan Data Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan