본문 바로가기
Programming/MSSQL

MSSQL 데이터에서 문자열 찾기

by 제타 2018. 4. 17.
반응형

어떤 테이블에서 특정 컬럼의 데이터를 확인할 때 like '%문자열%'을 사용한다.

하지만 매번 컬럼을 바꿔가면서 SELECT를 하기에는 너무 귀찮다


그래서 다음 프로시저를 만들어서 조회를 해보자


exec sp_FindStringInTable '%los%','dbo','ADDRESS'





CREATE PROCEDURE 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.' 

   IF CURSOR_STATUS('variable', 'col_cursor') <> -3 

   BEGIN 

       CLOSE col_cursor    

       DEALLOCATE col_cursor  

   END 

END CATCH

반응형