Wednesday, May 14, 2014

How to search for a text in SQL Server Database using Stored procedure

Here is the stored procedure that will search and display the table name and column name of the text you are passing as a parameter to search from the Database.
SQL Query
  1. CREATE PROC SearchTextFromDatabaseTables
  2. (
  3.     @SearchString nvarchar(100)
  4. )
  5. AS
  6. BEGIN
  7.     CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))
  8.     SET NOCOUNT ON
  9.     DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
  10.     SET  @TableName = ''
  11.     SET @SearchStr2 = QUOTENAME('%' + @SearchString + '%','''')
  12.     WHILE @TableName IS NOT NULL
  13.     BEGIN
  14.         SET @ColumnName = ''
  15.         SET @TableName =
  16.         (
  17.             SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
  18.             FROM     INFORMATION_SCHEMA.TABLES
  19.             WHERE         TABLE_TYPE = 'BASE TABLE'
  20.                 AND    QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
  21.                 AND    OBJECTPROPERTY(
  22.                         OBJECT_ID(
  23.                             QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
  24.                              ), 'IsMSShipped'
  25.                                ) = 0
  26.         )
  27.         WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
  28.         BEGIN
  29.             SET @ColumnName =
  30.             (
  31.                 SELECT MIN(QUOTENAME(COLUMN_NAME))
  32.                 FROM     INFORMATION_SCHEMA.COLUMNS
  33.                 WHERE         TABLE_SCHEMA    = PARSENAME(@TableName, 2)
  34.                     AND    TABLE_NAME    = PARSENAME(@TableName, 1)
  35.                     AND    DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal')
  36.                     AND    QUOTENAME(COLUMN_NAME) > @ColumnName
  37.             )
  38.             IF @ColumnName IS NOT NULL
  39.             BEGIN
  40.                 INSERT INTO #Results
  41.                 EXEC
  42.                 (
  43.                     'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)
  44.                     FROM ' + @TableName + ' (NOLOCK) ' +
  45.                     ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
  46.                 )
  47.             END
  48.         END  
  49.     END
  50.     SELECT ColumnName, ColumnValue FROM #Results
  51. END

Execute the Procedure using the below query and pass the text to be searched in it.
  1. exec SearchTextFromDatabaseTables 'TEXT TO BE SEARCHED'

and you will get the result as below
  1.     ColumnName                                    ColumnValue
  2. 1  [dbo].[TABLENAME].[COLUMNNAME]                SEARCHED TEXT STRING

No comments:

Post a Comment