어떤 테이블에서 특정 컬럼의 데이터를 확인할 때 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
'Programming > MSSQL' 카테고리의 다른 글
MSSQL 숫자만 뽑아내기 (1) | 2018.04.17 |
---|---|
MSSQL 인코딩 확인 및 변경 (0) | 2018.04.17 |
MSSQL TABLE REBUILD (0) | 2018.04.16 |
MSSQL 파일그룹, 할당 용량, 현재 사용중인 용량, 사용 가능한 용량 조회 (0) | 2018.04.16 |
MSSQL 테이블 인덱스, 인덱스 사이즈, row count 조회 (0) | 2018.04.16 |