Search all columns of a table for a value?

后端 未结 9 1542
自闭症患者
自闭症患者 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:21

    I have come across this issue, normally after uploading data from a CSV file where I had to modify the commas ',' in text fields so the data would load properly & once in SQL Server, the need comes to change the modified character back to a comma & it's helpful to be able to search the entire table. Greg Robidoux at mssqltips has posted a Stored Procedure that does just this, searches the Columns of a specified Table for a particular String value. You can find it along with a SPROC that does not use the cursor & more details here:

    https://www.mssqltips.com/sqlservertip/1522/searching-and-finding-a-string-value-in-all-columns-in-a-sql-server-table/

    I have posted the original SPROC below:

    USE master 
    GO 
    
    CREATE PROCEDURE dbo.sp_FindStringInTable @stringToFind VARCHAR(100), @schema sysname, @table sysname 
    AS 
    
    DECLARE @sqlCommand VARCHAR(8000) 
    DECLARE @where VARCHAR(8000) 
    DECLARE @columnName sysname 
    DECLARE @cursor VARCHAR(8000) 
    
    BEGIN TRY 
       SET @sqlCommand = 'SELECT * FROM [' + @schema + '].[' + @table + '] WHERE' 
       SET @where = '' 
    
       SET @cursor = 'DECLARE col_cursor CURSOR FOR SELECT COLUMN_NAME 
       FROM ' + DB_NAME() + '.INFORMATION_SCHEMA.COLUMNS 
       WHERE TABLE_SCHEMA = ''' + @schema + ''' 
       AND TABLE_NAME = ''' + @table + ''' 
       AND DATA_TYPE IN (''char'',''nchar'',''ntext'',''nvarchar'',''text'',''varchar'')' 
    
       EXEC (@cursor) 
    
       OPEN col_cursor    
       FETCH NEXT FROM col_cursor INTO @columnName    
    
       WHILE @@FETCH_STATUS = 0    
       BEGIN    
           IF @where <> '' 
               SET @where = @where + ' OR' 
    
           SET @where = @where + ' [' + @columnName + '] LIKE ''' + @stringToFind + '''' 
           FETCH NEXT FROM col_cursor INTO @columnName    
       END    
    
       CLOSE col_cursor    
       DEALLOCATE col_cursor  
    
       SET @sqlCommand = @sqlCommand + @where 
       PRINT @sqlCommand 
       EXEC (@sqlCommand)  
    END TRY 
    BEGIN CATCH 
       PRINT 'There was an error. Check to make sure object exists.'
       PRINT error_message()
    
       IF CURSOR_STATUS('variable', 'col_cursor') <> -3 
       BEGIN 
           CLOSE col_cursor    
           DEALLOCATE col_cursor  
       END 
    END CATCH 
    

提交回复
热议问题