Search all columns of a table for a value?

后端 未结 9 1697
自闭症患者
自闭症患者 2021-01-17 15:36

I\'ve looked for an answer to this, but all I can find is people asking how to search all columns of ALL tables in a database for a value. I just want to search all columns

9条回答
  •  抹茶落季
    2021-01-17 16:33

    I modified this stored proc to take a table name as the second parameter and just search that table for the data:

    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SearchOneTable]') AND type in (N'P', N'PC'))
    DROP PROCEDURE [dbo].[SearchOneTable]
    GO
    
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROC [dbo].[SearchOneTable]
    (
        @SearchStr nvarchar(100) = 'A',
        @TableName nvarchar(256) = 'dbo.Alerts'
    )
    AS
    BEGIN
    
        CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))
    
        --SET NOCOUNT ON
    
        DECLARE @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
        SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
        --SET @SearchStr2 = QUOTENAME(@SearchStr, '''') --exact match
        SET @ColumnName = ' '
    
    
            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 + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) 
                        FROM ' + @TableName + ' (NOLOCK) ' +
                        ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
                    )
                END
            END 
        SELECT ColumnName, ColumnValue FROM #Results
    END
    
    
    GO
    

提交回复
热议问题