I was recently needing to search an entire database for a particular string. I needed a script that would do this, so I went searching. I found a really useful script here:  http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm. I am reposting the code here for my own future reference, and to share the script with you. But all the credit goes to the original creator.


Here is an example of how you would use the stored procedure to search the entire database for the string "Computer"
EXEC SearchAllTables 'Computer'
GO


Here is the code you need to execute against the database. It will create a stored procedure in the database that can then be used to perform the search. 
  CREATE PROC SearchAllTables ( 	@SearchStr nvarchar(100) ) AS BEGIN  	-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved. 	-- Purpose: To search all columns of all tables for a given search string 	-- Written by: Narayana Vyas Kondreddi 	-- Site: http://vyaskn.tripod.com 	-- Tested on: SQL Server 7.0 and SQL Server 2000 	-- Date modified: 28th July 2002 22:50 GMT   	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') 					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  



Leave a Reply.