Programming/DB
[MSSQL] 검색 : 특정 테이블에서 모든 컬럼의 특정 문자열 데이터 찾기
까까까
2017. 3. 7. 15:35
게시판의 검색기능을 구현하는데 컬럼명을 선택하는 것이 아닌
모든 컬럼에서 알아서 검색하길 원했다.
구현하기 위해서는 프로시저의 생성이 먼저 필요했다.
[ MSSQL SP 생성 ]
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
[ 사용 방법 ]
-- " 를 값으로 가지고 있는 A_Table의 모든 row 찾기. EXEC sp_FindStringInTable '%"%', 'dbo', 'A_Table' -- 2015로 시작하는 값을 가지고 있는 A_Table의 모든 row 찾기. EXEC sp_FindStringInTable '2015%', 'dbo', 'A_Table'