게시판의 검색기능을 구현하는데 컬럼명을 선택하는 것이 아닌
모든 컬럼에서 알아서 검색하길 원했다.
구현하기 위해서는 프로시저의 생성이 먼저 필요했다.
[ MSSQL SP 생성 ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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 |
[ 사용 방법 ]
1 2 3 4 5 | -- " 를 값으로 가지고 있는 A_Table의 모든 row 찾기. EXEC sp_FindStringInTable '%"%' , 'dbo' , 'A_Table' -- 2015로 시작하는 값을 가지고 있는 A_Table의 모든 row 찾기. EXEC sp_FindStringInTable '2015%' , 'dbo' , 'A_Table' |
'Programming > DB' 카테고리의 다른 글
[MYSQL] SubQuery 사용법 (0) | 2016.06.16 |
---|