database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 5486 게시물 읽기
No. 5486
제가만든 SearchAndReplace 한번 봐주세요. 튜닝이 필요할까요?
작성자
julia
작성일
2009-12-05 01:29ⓒ
2009-12-05 01:33ⓜ
조회수
5,956

안녕하세요.

근간에 아래 stored procedure를 작성해서 잘 사용하고 있는데요.

문득.... 내가 왜 이렇게 replace하려고 하는 keyword들을 매번 콜하나 싶은 생각이 드는거에요.

@SearchStr에 delimeter를 넣어서 한번만 콜하구 그 안에서 다 처리하게 하면 좋지 않을까? 성능면이나 ...

군데... 딱 결론을 못 내겠습니다.


예를 들어  아래와 같이 5번 콜할것을

EXEC SearchAndReplace 'dbo.Endeca_Listings', 'CHAR(13)', ' ', 'Y'

EXEC SearchAndReplace 'dbo.Endeca_Listings', 'CHAR(10)', ' ', 'Y'

EXEC SearchAndReplace 'dbo.Endeca_Listings', '$', ' ', 'N'

EXEC SearchAndReplace 'dbo.Endeca_Listings', '|', ' ', 'N'

EXEC SearchAndReplace 'dbo.Endeca_Listings', '#', ' ', 'N'


아래와 같이 2번에 콜하는걸로 (delimeter는  ^)

EXEC SearchAndReplace 'dbo.Endeca_Listings', 'CHAR(13)^CHAR(10)', ' ', 'Y'

EXEC SearchAndReplace 'dbo.Endeca_Listings', '$^|^#', ' ', 'N'

로 하면 어떨까 하는 생각입니다.


현재 돌고 있는 stored procedure가 아래와 같은데요.

update을 많이 쓰면 성능면에서 많이 느려진다고 하니,

개념적으로 아래와 같이 바꿔주면 좋을까 싶거든요.

현재

update table set column = replace(column,'#','') where charindex('#',column)>0

update table set column = replace(column,'|','') where charindex('|',column)>0

update table set column = replace(column,'$','') where charindex('$',column)>0

-> update table set column = replace(replace(replace(column,'#','') ,'|','') , '$','') where charindex('#',column)>0 or charindex('|',column)>0 or charindex('$',column)>0


군데 이렇게 하려면 split써서 변수에 저장해야하고...

그래서 좀 복잡해지는 거두 같구. 변수 많이 쓰면 안좋을까 싶은생각도 들고...

암튼 어떤걸 주 포인트로 보고 고쳐야할지 고민이 많이 되서요.


그럼. 조언 부탁드립니다.

----------------------------------------------------------------------------------------------------

CREATE PROC [dbo].[SearchAndReplace]

(

    @TableName nvarchar(256),

    @SearchStr nvarchar(100),

    @ReplaceStr nvarchar(100),

    @fAscii char(1)

)

AS

BEGIN


    SET NOCOUNT ON


    DECLARE @ColumnName nvarchar(128), @SearchStr2 nvarchar(110), @SQL nvarchar(4000), @RCTR int

    SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

    SET @RCTR = 0


    IF @TableName IS NOT NULL

    BEGIN

        SET @ColumnName = ''

        WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)

        BEGIN

            SET @ColumnName =

            (

                SELECT MIN(QUOTENAME(COLUMN_NAME))

                FROM     INFORMATION_SCHEMA.COLUMNS

                WHERE     TABLE_SCHEMA= PARSENAME(@TableName, 2)

                    AND    TABLE_NAME    = PARSENAME(@TableName, 1)

                    AND    DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')

                    AND    QUOTENAME(COLUMN_NAME) > @ColumnName

            )

   

            IF @ColumnName IS NOT NULL

            BEGIN

                IF @fAscii = 'Y'

                    BEGIN

                        SET @SQL=    'UPDATE ' + @TableName + ' SET ' + @ColumnName

                                + ' =  REPLACE(' + @ColumnName + ', ' + @SearchStr + ', ' + QUOTENAME(@ReplaceStr, '''') +

                                ') WHERE CHARINDEX(' + @SearchStr + ', ' + @ColumnName + ')>0'

                    END

                ELSE

                    BEGIN

                        SET @SQL=    'UPDATE ' + @TableName + ' SET ' + @ColumnName

                                + ' =  REPLACE(' + @ColumnName + ', ' + QUOTENAME(@SearchStr, '''') + ', ' + QUOTENAME(@ReplaceStr, '''') +

                                ') WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2

                    END

                EXEC (@SQL)


                SET @RCTR = @RCTR + @@ROWCOUNT

            END

        END   

    END

    SELECT 'Replaced ' + CAST(@RCTR AS varchar) + ' occurence(s)' AS 'Outcome'

END


----------------------------------------------------------------------------------------------------

[Top]
No.
제목
작성자
작성일
조회
5492[HELP]사용자 지정 함수 정의 중 동적쿼리 작성 가능 여부
김강철
2009-12-09
10300
5491학생시간표 구하기
최대근
2009-12-09
5900
5490bak 파일 복원시 기존 db 에 추가하는 형식은 가능한가요?
yGun
2009-12-07
6048
5486제가만든 SearchAndReplace 한번 봐주세요. 튜닝이 필요할까요?
julia
2009-12-05
5956
5485특정 값 순으로 정렬 하기 [3]
한치우
2009-12-04
5795
5484문자열 조합된 컬럼을 검색 할려고 할때 [3]
한동
2009-12-02
6033
5483MS-SQL 8.0.0.2039의 JDBC 드라이버를 어떤 것을 써야 하나요?
장명석
2009-12-02
5997
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다