A
A
Andrey Osty2012-02-15 11:19:27
SQL
Andrey Osty, 2012-02-15 11:19:27

MS SQL 2008 R2 word search across all tables

Share a request from your repository. It is necessary to find in which table the text is stored (url "http:// ...").

Answer the question

In order to leave comments, you need to log in

1 answer(s)
I
ipfw, 2012-02-15
@ipfw

Once upon a time I used this, it worked on MSSQL2000, for 2008 there is no way to check it, try it yourself.

CREATE PROC SearchAllTables (@SearchStr nvarchar(100))
AS
BEGIN
  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

Usage example:
EXEC SearchAllTables 'Ваша строка'
GO

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question