Friday, 26 August 2016

Search Data From Whole Table without knowing column

No comments
CREATE  PROCEDURE [dbo].[sp_FindStringInTable]
(
 @PageSize INT = NULL,
 @CurrentPage INT,        
 @stringToFind VARCHAR(100),
 @table sysname,
 @type varchar(100),
 @columnTypeName varchar(100)  
)
AS


DECLARE @sqlCommand VARCHAR(8000)
DECLARE @where VARCHAR(8000)
DECLARE @columnName sysname
DECLARE @cursor VARCHAR(8000)
DECLARE @Skip INT
DECLARE @Take INT

 IF(LEN(@type)<=0)
  BEGIN
   SET @type=NULL
  END
 IF(LEN(@columnTypeName)<=0)
  BEGIN
   SET @columnTypeName=NULL
  END

 SET @Skip = (@CurrentPage - 1) * @PageSize
SET @Take = @CurrentPage * @PageSize


BEGIN TRY

   SET @sqlCommand = 'SELECT *,(select typeName from address_types where address_types.type_id=A.type_id) as typeName
   FROM
   (SELECT ROW_NUMBER() OVER
   (ORDER BY add_id desc) rownumber,* FROM [' + @table + '] WHERE'
   SET @where = ''  
   SET @cursor = 'DECLARE col_cursor CURSOR FOR SELECT COLUMN_NAME
   FROM ' + DB_NAME() + '.INFORMATION_SCHEMA.COLUMNS WHERE  
    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 + '%'''
  IF(LEN(@columnTypeName)>0)
    BEGIN
  SET @where=@where+' AND '+@columnTypeName+'='+COALESCE(@type,'[type_id]')+''
     END  
       FETCH NEXT FROM col_cursor INTO @columnName  
   END  

   CLOSE col_cursor  
   DEALLOCATE col_cursor

   SET @sqlCommand = @sqlCommand + @where +') A WHERE
   A.RowNumber > ' + Cast(@Skip AS VARCHAR) + ' AND A.RowNumber <= '+cast(@Take as varchar)
 
   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